Source code of Windows XP (NT5)
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.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Microsoft WMI OLE DB Provider
// (C) Copyright 1999 Microsoft Corporation. All Rights Reserved.
//
// Enumeration Routines
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _ENUMERATOR_
#define _ENUMERATOR_
#include "critsec.h"
class CEnumeratorNameSpace;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
class CImpISourcesRowset : public ISourcesRowset { public: CImpISourcesRowset(CEnumeratorNameSpace *pCEnumeratorNameSpace) { m_pCEnumeratorNameSpace = pCEnumeratorNameSpace; m_cRef = 0; } ~CImpISourcesRowset() { }
STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppv);
STDMETHODIMP GetSourcesRowset( IUnknown *pUnkOuter, REFIID riid, ULONG cPropertySets, DBPROPSET rgPropertySets[], IUnknown **ppvSourcesRowset );
private:
CEnumeratorNameSpace *m_pCEnumeratorNameSpace; ULONG m_cRef;
};
typedef CImpISourcesRowset * PIMPISOURCESROWSET;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Create a moniker with the name passed to it.
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////
class CImpIParseDisplayName : public IParseDisplayName { public: CImpIParseDisplayName(CEnumeratorNameSpace *pCEnumeratorNameSpace) { m_pCEnumeratorNameSpace = pCEnumeratorNameSpace; m_cRef = 0;
} ~CImpIParseDisplayName() { }
STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppv); STDMETHODIMP ParseDisplayName ( IBindCtx *pbc, //Pointer to bind context
WCHAR *pszDisplayName, //Pointer to string containing display name
ULONG *pchEaten, //Length, in characters, of display name
IMoniker **ppmkOut //Pointer to moniker that results
);
private:
CEnumeratorNameSpace *m_pCEnumeratorNameSpace; ULONG m_cRef; };
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Contains a few interfaces and enumerates namespaces
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////
class CEnumeratorNameSpace : public CBaseObj { friend CImpISourcesRowset; friend CImpIParseDisplayName; friend CImpISupportErrorInfo; public: //
CEnumeratorNameSpace(LPUNKNOWN); ~CEnumeratorNameSpace(void);
STDMETHODIMP Initialize(void);
inline CDataSource* GetDataSource() { return (CDataSource *)m_pCDataSource; } inline CDBSession* GetSession() { return (CDBSession*)m_pCDBSession; }
STDMETHODIMP QueryInterface(REFIID, LPVOID *); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
protected:
enum ENK{ ENK_DIDINIT = 0x0001, }; // Values for m_dwStatus.
DWORD m_dwStatus;
LPUNKNOWN m_pCDataSource; LPUNKNOWN m_pCDBSession; // Contained interfaces
CImpISourcesRowset m_ISourcesRowset; // Contained ISourcesRowset
CImpIParseDisplayName m_IParseDisplayName; // Contained IParseDisplayName
CImpISupportErrorInfo* m_pISupportErrorInfo; // Contained ISupportErrorInfo
HRESULT CreateDataSource(); HRESULT AddInterfacesForISupportErrorInfo();
}; //CEnumeratorNameSpace
typedef CEnumeratorNameSpace * PCENUMERATOR;
#endif
|