//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1999. // // File: scminfo.hxx // // Contents: Definitions/objects for use by scm-level activators // // History: 05-Sep-99 JSimmons Created // //-------------------------------------------------------------------------- #ifndef __SCMINFO_HXX__ #define __SCMINFO_HXX__ #define SPENUM_INITIAL_SIZE 10 #define SPENUM_GROWTH_SIZEADD 10 class CSCMProcessControl; class CSCMProcessEnumerator : public IEnumSCMProcessInfo { public: CSCMProcessEnumerator(); CSCMProcessEnumerator(CSCMProcessEnumerator* pCSPEOrig, HRESULT* phrInit); CSCMProcessEnumerator(CSCMProcessControl* pOuterUnk); ~CSCMProcessEnumerator(); // IUnknown methods STDMETHOD (QueryInterface) (REFIID rid, void** ppv); STDMETHOD_(ULONG,AddRef) (); STDMETHOD_(ULONG,Release) (); // IEnumSCMProcessInfo methods STDMETHOD (Next) (ULONG cElems, SCMProcessInfo** pSCMProcessInfo, ULONG* pcFetched); STDMETHOD (Skip) (ULONG cElems); STDMETHOD (Reset) (); STDMETHOD (Clone) (IEnumSCMProcessInfo **ppESPI); // Public non-interface methods: HRESULT AddProcess(SCMProcessInfo* pSPI); private: // private data: LONG _lRefs; DWORD _dwNumSPInfos; DWORD _dwMaxSPInfos; DWORD _dwCurSPInfo; CSCMProcessControl* _pOuterUnk; SCMProcessInfo** _ppSPInfos; SCMProcessInfo** _ppSPInfosForReal; SCMProcessInfo* _pSPInfosInitial[SPENUM_INITIAL_SIZE]; // private methods: }; class CSCMProcessControl : public ISCMProcessControl { public: CSCMProcessControl(); ~CSCMProcessControl(); // IUnknown methods STDMETHOD (QueryInterface) (REFIID rid, void** ppv); STDMETHOD_(ULONG,AddRef) (); STDMETHOD_(ULONG,Release) (); // ISCMProcessControl methods STDMETHOD (FindApplication) (REFGUID rappid, IEnumSCMProcessInfo** ppESPI); STDMETHOD (FindClass) (REFCLSID rclsid, IEnumSCMProcessInfo** ppESPI); STDMETHOD (FindProcess) (DWORD pid, SCMProcessInfo** ppSCMProcessInfo); STDMETHOD (SuspendApplication) (REFGUID rappid); STDMETHOD (SuspendClass) (REFCLSID rclsid); STDMETHOD (SuspendProcess) (DWORD pid); STDMETHOD (ResumeApplication) (REFGUID rappid); STDMETHOD (ResumeClass) (REFCLSID rclsid); STDMETHOD (ResumeProcess) (DWORD pid); STDMETHOD (RetireApplication) (REFGUID rappid); STDMETHOD (RetireClass) (REFCLSID rclsid); STDMETHOD (RetireProcess) (DWORD pid); STDMETHOD (FreeSCMProcessInfo) (SCMProcessInfo** ppSCMProcessInfo); // Public non-interface methods: static HRESULT CopySCMProcessInfo(SCMProcessInfo* pSPISrc, SCMProcessInfo** ppSPIDest); static HRESULT FreeSCMProcessInfoPriv(SCMProcessInfo** ppSCMProcessInfo); private: // private data: LONG _lRefs; BOOL _bInitializedEnum; //CSCMProcessEnumerator _SPEnum; // private methods: HRESULT FillInSCMProcessInfo(CProcess* pprocess, BOOL bProcessReady, SCMProcessInfo** ppSPI); HRESULT FindAppOrClass(const GUID& rguid, CServerTable* pServerTable, IEnumSCMProcessInfo** ppESPI); HRESULT InitializeEnumerator(); }; #endif // __SCMINFO_HXX__