Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//---------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation
//
// File: pubenum.cpp
//
// The current order of enumeration is Legacy --> Darwin --> SMS
//
// History:
// 1-18-97 by dli
//------------------------------------------------------------------------
#include "priv.h"
#include "pubenum.h"
void _DestroyHdpaEnum(HDPA hdpaEnum) { ASSERT(IsValidHDPA(hdpaEnum)); IEnumPublishedApps * pepa; int idpa; for (idpa = 0; idpa < DPA_GetPtrCount(hdpaEnum); idpa++) { pepa = (IEnumPublishedApps *)DPA_GetPtr(hdpaEnum, idpa); if (EVAL(pepa)) pepa->Release(); }
DPA_Destroy(hdpaEnum); }
CShellEnumPublishedApps::CShellEnumPublishedApps(HDPA hdpaEnum) : _cRef(1), _hdpaEnum(hdpaEnum) { }
CShellEnumPublishedApps::~CShellEnumPublishedApps() { if (_hdpaEnum) _DestroyHdpaEnum(_hdpaEnum); }
// IEnumPublishedApps::QueryInterface
HRESULT CShellEnumPublishedApps::QueryInterface(REFIID riid, LPVOID * ppvOut) { static const QITAB qit[] = { QITABENT(CShellEnumPublishedApps, IEnumPublishedApps), // IID_IEnumPublishedApps
{ 0 }, };
return QISearch(this, qit, riid, ppvOut); }
// IEnumPublishedApps::AddRef
ULONG CShellEnumPublishedApps::AddRef() { _cRef++; TraceMsg(TF_OBJLIFE, "CShellEnumPublishedApps()::AddRef called, new _cRef=%lX", _cRef); return _cRef; }
// IEnumPublishedApps::Release
ULONG CShellEnumPublishedApps::Release() { _cRef--; TraceMsg(TF_OBJLIFE, "CShellEnumPublishedApps()::Release called, new _cRef=%lX", _cRef); if (_cRef > 0) return _cRef;
delete this; return 0; }
// IEnumPublishedApps::Next
HRESULT CShellEnumPublishedApps::Next(IPublishedApp ** ppia) { HRESULT hres = E_FAIL; if (_hdpaEnum) { IEnumPublishedApps * pepa = (IEnumPublishedApps *)DPA_GetPtr(_hdpaEnum, _iEnum);
//
// If pepa is not valid or pepa->Next failed, or at the end of the current enumerator,
// we skip this Enumerator, and go on to the next one until we hit the limit
while ((!pepa || S_OK != (hres = pepa->Next(ppia))) && (_iEnum < DPA_GetPtrCount(_hdpaEnum))) { _iEnum++; pepa = (IEnumPublishedApps *)DPA_GetPtr(_hdpaEnum, _iEnum); } } return hres; }
// IEnumPublishedApps::Reset
HRESULT CShellEnumPublishedApps::Reset(void) { // Call reset on everyone in the list and set our index iEnum to 0;
if (_hdpaEnum) { IEnumPublishedApps * pepa; int idpa; for (idpa = 0; idpa < DPA_GetPtrCount(_hdpaEnum); idpa++) { pepa = (IEnumPublishedApps *)DPA_GetPtr(_hdpaEnum, idpa); if (pepa) pepa->Reset(); }
_iEnum = 0;
return S_OK; } return E_FAIL; }
|