135 lines
3.5 KiB
C++
135 lines
3.5 KiB
C++
|
//---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation
|
||
|
//
|
||
|
// File: darenum.cpp
|
||
|
//
|
||
|
// The current order of enumeration is Legacy --> Darwin --> SMS
|
||
|
//
|
||
|
// History:
|
||
|
// 2-03-97 by dli
|
||
|
//------------------------------------------------------------------------
|
||
|
#include "priv.h"
|
||
|
|
||
|
// Do not build this file if on Win9X or NT4
|
||
|
#ifndef DOWNLEVEL_PLATFORM
|
||
|
|
||
|
#include "darenum.h"
|
||
|
#include "darapp.h"
|
||
|
#include "util.h"
|
||
|
|
||
|
CDarwinEnumPublishedApps::CDarwinEnumPublishedApps(GUID * pAppCategoryId) : _cRef(1)
|
||
|
{
|
||
|
ASSERT(_bGuidUsed == FALSE);
|
||
|
|
||
|
// Do we have a Catogory GUID?
|
||
|
if (pAppCategoryId)
|
||
|
{
|
||
|
// Yes
|
||
|
_CategoryGUID = *pAppCategoryId;
|
||
|
_bGuidUsed = TRUE;
|
||
|
}
|
||
|
|
||
|
GetManagedApplications(_bGuidUsed ? &_CategoryGUID : NULL, _bGuidUsed ? MANAGED_APPS_FROMCATEGORY : MANAGED_APPS_USERAPPLICATIONS,
|
||
|
MANAGED_APPS_INFOLEVEL_DEFAULT, &_dwNumApps, &_prgApps);
|
||
|
}
|
||
|
|
||
|
CDarwinEnumPublishedApps::~CDarwinEnumPublishedApps()
|
||
|
{
|
||
|
if (_prgApps && (_dwNumApps > 0))
|
||
|
{
|
||
|
LocalFree(_prgApps);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// IEnumPublishedApps::QueryInterface
|
||
|
HRESULT CDarwinEnumPublishedApps::QueryInterface(REFIID riid, LPVOID * ppvOut)
|
||
|
{
|
||
|
static const QITAB qit[] = {
|
||
|
QITABENT(CDarwinEnumPublishedApps, IEnumPublishedApps), // IID_IEnumPublishedApps
|
||
|
{ 0 },
|
||
|
};
|
||
|
|
||
|
return QISearch(this, qit, riid, ppvOut);
|
||
|
}
|
||
|
|
||
|
// IEnumPublishedApps::AddRef
|
||
|
ULONG CDarwinEnumPublishedApps::AddRef()
|
||
|
{
|
||
|
_cRef++;
|
||
|
TraceMsg(TF_OBJLIFE, "CDarwinEnumPublishedApps()::AddRef called, new _cRef=%lX", _cRef);
|
||
|
return _cRef;
|
||
|
}
|
||
|
|
||
|
// IEnumPublishedApps::Release
|
||
|
ULONG CDarwinEnumPublishedApps::Release()
|
||
|
{
|
||
|
_cRef--;
|
||
|
TraceMsg(TF_OBJLIFE, "CDarwinEnumPublishedApps()::Release called, new _cRef=%lX", _cRef);
|
||
|
if (_cRef > 0)
|
||
|
return _cRef;
|
||
|
|
||
|
delete this;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
// IEnumPublishedApps::Next
|
||
|
// PERF: we should do some optimization instead of enumerating these apps
|
||
|
// one by one.
|
||
|
// S_FALSE means end of enumeration
|
||
|
HRESULT CDarwinEnumPublishedApps::Next(IPublishedApp ** ppia)
|
||
|
{
|
||
|
HRESULT hres = S_FALSE;
|
||
|
*ppia = NULL;
|
||
|
if (_prgApps && (_dwNumApps > 0) && (_dwIndex < _dwNumApps))
|
||
|
{
|
||
|
BOOL bContinue = FALSE;
|
||
|
do {
|
||
|
PMANAGEDAPPLICATION pma = &_prgApps[_dwIndex];
|
||
|
|
||
|
// NOTE: no Hydra machines (_bTSSession == TRUE) we filter out all the
|
||
|
// Darwin apps.
|
||
|
if (pma->pszPackageName && pma->pszPackageName[0])
|
||
|
{
|
||
|
CDarwinPublishedApp *pdpa = new CDarwinPublishedApp(pma);
|
||
|
if (pdpa)
|
||
|
{
|
||
|
*ppia = SAFECAST(pdpa, IPublishedApp *);
|
||
|
hres = S_OK;
|
||
|
}
|
||
|
else
|
||
|
hres = E_OUTOFMEMORY;
|
||
|
bContinue = FALSE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ClearManagedApplication(pma);
|
||
|
bContinue = TRUE;
|
||
|
}
|
||
|
|
||
|
_dwIndex++;
|
||
|
} while (bContinue && (_dwIndex < _dwNumApps));
|
||
|
}
|
||
|
|
||
|
return hres;
|
||
|
}
|
||
|
|
||
|
|
||
|
// IEnumPublishedApps::Reset
|
||
|
HRESULT CDarwinEnumPublishedApps::Reset(void)
|
||
|
{
|
||
|
if (_prgApps && (_dwNumApps > 0))
|
||
|
{
|
||
|
LocalFree(_prgApps);
|
||
|
}
|
||
|
|
||
|
GetManagedApplications(_bGuidUsed ? &_CategoryGUID : NULL, MANAGED_APPS_USERAPPLICATIONS,
|
||
|
_bGuidUsed ? MANAGED_APPS_FROMCATEGORY : MANAGED_APPS_INFOLEVEL_DEFAULT, &_dwNumApps, &_prgApps);
|
||
|
|
||
|
_dwIndex = 0;
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
#endif //DOWNLEVEL_PLATFORM
|