/*++ Copyright (C) Microsoft Corporation Module Name: compdata.h Abstract: header file defines CComponentData class Author: William Hsieh (williamh) created Revision History: --*/ #ifndef __COMPDATA_H_ #define __COMPDATA_H_ extern const WCHAR* const DM_COMPDATA_SIGNATURE; class CComponent; class CComponentData : public IComponentData, public IExtendPropertySheet, public IExtendContextMenu, public IPersistStream, public ISnapinHelp { public: CComponentData(); ~CComponentData(); // // IUNKNOWN interface // STDMETHOD_(ULONG, AddRef)(); STDMETHOD_(ULONG, Release)(); STDMETHOD(QueryInterface)(REFIID riid, void** ppv); // // IComponentData interface // STDMETHOD(Initialize)(LPUNKNOWN pUnknown); STDMETHOD(CreateComponent)(LPCOMPONENT* ppComponent); STDMETHOD(Notify)(LPDATAOBJECT lpDataObject, 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 // STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, LPDATAOBJECT lpDataObject); STDMETHOD(QueryPagesFor)(LPDATAOBJECT lpDataObject); // // IExtendContextMenu // STDMETHOD(AddMenuItems)(LPDATAOBJECT pDataObject, LPCONTEXTMENUCALLBACK lpCallbackUnknown, long* pInsertionAllowed); STDMETHOD(Command)(long nCommandID, LPDATAOBJECT pDataObject); // // IPersistStream // STDMETHOD(IsDirty)(); STDMETHOD(Load)(IStream* pStm); STDMETHOD(Save)(IStream* pStm, BOOL fClearDirty); STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize); STDMETHOD(GetClassID)(CLSID* pClassID); virtual const CLSID& GetCoClassID() = 0; virtual BOOL IsPrimarySnapin() = 0; // //ISnapinHelp // STDMETHOD(GetHelpTopic)(LPOLESTR* lpCompileHelpFile); // // Helper functions // CCookie* GetActiveCookie(MMC_COOKIE cookie) { return (NULL == cookie) ? m_pCookieRoot : (CCookie*)cookie; } CScopeItem* FindScopeItem(MMC_COOKIE cookie); BOOL InitializeMachine() { ASSERT(m_pMachine); if (m_pMachine) { return m_pMachine->Initialize(m_hwndMain, NULL); } return FALSE; } String m_strMachineName; CMachine* m_pMachine; COOKIE_TYPE m_ctRoot; String m_strStartupDeviceId; String m_strStartupCommand; void SetDirty() { m_IsDirty = TRUE; } LPCONSOLENAMESPACE m_pScope; LPCONSOLE m_pConsole; HWND m_hwndMain; private: // // Event notification functions // HRESULT OnDelete(MMC_COOKIE cookie, MMC_COOKIE arg, LPARAM param); HRESULT OnExpand(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param); HRESULT OnRename(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnContextMenu(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnProperties(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnBtnClick(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT CreateScopeItems(); HRESULT CreateCookieSubtree(CScopeItem* pScopeItem, CCookie* pCookieParent); HRESULT LoadScopeIconsForScopePane(); HRESULT ResetScopeItem(CScopeItem* pScopeItem); HRESULT DoStartupProperties(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, LPDATAOBJECT pDataObject); BOOL m_IsDirty; CCookie* m_pCookieRoot; CScopeItem* m_pScopeItemRoot; LONG m_Ref; }; // // Primary snapin // class CComponentDataPrimary : public CComponentData { public: virtual const CLSID& GetCoClassID() { return CLSID_DEVMGR; } virtual BOOL IsPrimarySnapin() { return TRUE; } }; // // Extension snapin // class CComponentDataExtension : public CComponentData { public: virtual const CLSID& GetCoClassID() { return CLSID_DEVMGR_EXTENSION; } virtual BOOL IsPrimarySnapin() { return FALSE; } }; typedef struct tagCompDataPersistInfo { DWORD Size; WCHAR Signature[16]; COOKIE_TYPE RootCookie; WCHAR ComputerFullName[MAX_PATH + 3]; } COMPDATA_PERSISTINFO, *PCOMPDATA_PERSISTINFO; #endif //__COMPDATA_H_