#ifndef _CCOMPDTA_H #define _CCOMPDTA_H // forward decls class CWirelessManagerFolder; class CSnapObject; class CComponentDataImpl: public IComponentData, #ifdef WIZ97WIZARDS public IExtendPropertySheet2, #else public IExtendPropertySheet, #endif public IExtendContextMenu, public IPersistStream, public ISnapinHelp, public CComObjectRoot { BEGIN_COM_MAP(CComponentDataImpl) COM_INTERFACE_ENTRY(IComponentData) #ifdef WIZ97WIZARDS COM_INTERFACE_ENTRY(IExtendPropertySheet2) #else COM_INTERFACE_ENTRY(IExtendPropertySheet) #endif COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(ISnapinHelp) COM_INTERFACE_ENTRY(IPersistStream) END_COM_MAP() friend class CComponentImpl; friend class CDataObject; CComponentDataImpl(); ~CComponentDataImpl(); public: virtual const CLSID& GetCoClassID() = 0; public: // IComponentData interface members STDMETHOD(Initialize)(LPUNKNOWN pUnknown); STDMETHOD(CreateComponent)(LPCOMPONENT* ppComponent); STDMETHOD(Notify)(LPDATAOBJECT pDataobject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param); STDMETHOD(Destroy)(); STDMETHOD(QueryDataObject)(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject); STDMETHOD(GetDisplayInfo)(SCOPEDATAITEM* pScopeDataItem); STDMETHOD(CompareObjects)(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB); // IExtendPropertySheet interface public: STDMETHOD(QueryPagesFor)(LPDATAOBJECT pDataobject); STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, LPDATAOBJECT pDataobject); #ifdef WIZ97WIZARDS STDMETHOD(GetWatermarks)(LPDATAOBJECT pDataobject, HBITMAP* lphWatermark, HBITMAP* lphHeader, HPALETTE* lphPalette, BOOL* bStretch); #endif // IExtendContextMenu public: STDMETHOD(AddMenuItems)(LPDATAOBJECT pDataObject, LPCONTEXTMENUCALLBACK pCallbackUnknown, long *pInsertionAllowed); STDMETHOD(Command)(long nCommandID, LPDATAOBJECT pDataObject); public: // IPersistStream interface members STDMETHOD(GetClassID)(CLSID *pClassID); STDMETHOD(IsDirty)(); STDMETHOD(Load)(IStream *pStm); STDMETHOD(Save)(IStream *pStm, BOOL fClearDirty); STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize); // ISnapinHelp interface member public: STDMETHOD(GetHelpTopic)(LPOLESTR* lpCompiledHelpFile); #if DBG==1 public: ULONG InternalAddRef() { return CComObjectRoot::InternalAddRef(); } ULONG InternalRelease() { return CComObjectRoot::InternalRelease(); } #endif // DBG==1 private: LPCONSOLENAMESPACE m_pConsoleNameSpace; // My interface pointer to the scope pane LPCONSOLE m_pConsole; // My interface pointer to the console HSCOPEITEM m_pRootFolderScopeItem; BOOL m_bIsDirty; BOOL m_bRsop; void SetDirty(BOOL b = TRUE) { m_bIsDirty = b; } void ClearDirty() { m_bIsDirty = FALSE; } BOOL InternalIsDirty() { return m_bIsDirty; } void AddScopeItemToResultPane(MMC_COOKIE cookie); // BOOL IsScopePaneNode(LPDATAOBJECT pDataobject); HRESULT GetDomainDnsName(CString & strName); HRESULT GetDomainGPOName(CString & strName); public: CComObject * GetStaticScopeObject () {return m_pScopeRootFolder;}; // the returned interface will be valid for the duration of the call, but if you intend on // storing it you must AddRef IGPEInformation* UseGPEInformationInterface() {return m_pGPEInformation;}; IRSOPInformation* UseRSOPInformationInterface() {return m_pRSOPInformation;}; BOOL IsRsop() { return m_bRsop; }; LPCONSOLE GetConsole() {return m_pConsole;}; LPCONSOLENAMESPACE GetConsoleNameSpace () {return m_pConsoleNameSpace;}; void EnumLocation (enum STORAGE_LOCATION enumLocation); enum STORAGE_LOCATION EnumLocation() { return m_enumLocation; } void RemoteMachineName (CString sRemoteMachineName) {m_sRemoteMachineName = sRemoteMachineName;} CString RemoteMachineName () {return m_sRemoteMachineName;} void DomainGPOName (CString sDomainGPOName) {m_sDomainGPOName = sDomainGPOName;} CString DomainGPOName () {return m_sDomainGPOName;} LPPROPERTYSHEETPROVIDER m_pPrshtProvider; HANDLE GetPolicyStoreHandle() { return(m_hPolicyStore); } DWORD OpenPolicyStore(); void IssueStorageWarning (BOOL bWarn) { m_bStorageWarningIssued = !bWarn; } BOOL m_bStorageWarningIssued; BOOL m_bLocationStorageWarningIssued; BOOL m_bAttemptReconnect; private: CComObject * m_pScopeRootFolder; IGPEInformation* m_pGPEInformation; IRSOPInformation* m_pRSOPInformation; enum STORAGE_LOCATION m_enumLocation; HANDLE m_hPolicyStore; IWbemServices *m_pWbemServices; CString m_sRemoteMachineName; CString m_sDomainGPOName; BOOL m_bDontDisplayRootFolderProperties; BOOL m_bNeedCleanUpWSA; #ifdef _DEBUG friend class CDataObject; int m_cDataObjects; #endif // for winsock WSADATA wsaData; }; // TODO: declare registry values appear to conflict with step four and others class CComponentDataPrimaryImpl : public CComponentDataImpl, public CComCoClass { public: DECLARE_REGISTRY(CComponentImpl, _T("Wireless.Snapin.1"), _T("Wireless.Snapin"), IDS_SNAPIN_DESC, THREADFLAGS_BOTH) CComponentDataPrimaryImpl(); virtual const CLSID & GetCoClassID(){ return CLSID_Snapin; } }; class CComponentDataExtensionImpl : public CComponentDataImpl, public CComCoClass { public: DECLARE_REGISTRY(CComponentImpl, _T("Wireless.Extension.1"), _T("Wireless.Extension"), IDS_SNAPIN_DESC, THREADFLAGS_BOTH) virtual const CLSID & GetCoClassID(){ return CLSID_Extension; } }; #endif