#ifndef __WBEM_CMDLINE_CONSUMER__H_ #define __WBEM_CMDLINE_CONSUMER__H_ #include #include #include "txttempl.h" #include class CCommandLineConsumer : public CUnk { protected: class XProvider : public CImpl { public: XProvider(CCommandLineConsumer* pObj) : CImpl(pObj){} HRESULT STDMETHODCALLTYPE FindConsumer( IWbemClassObject* pLogicalConsumer, IWbemUnboundObjectSink** ppConsumer); } m_XProvider; friend XProvider; public: CCommandLineConsumer(CLifeControl* pControl = NULL, IUnknown* pOuter = NULL) : CUnk(pControl, pOuter), m_XProvider(this) {} ~CCommandLineConsumer(){} void* GetInterface(REFIID riid); }; class CCommandLineSink : public CUnk { protected: class XSink : public CImpl { public: XSink(CCommandLineSink* pObj) : CImpl(pObj){} HRESULT STDMETHODCALLTYPE CreateProcessNT(WCHAR* wsCommandLine, WCHAR* wsTitle, PROCESS_INFORMATION& pi, FILETIME& now); HRESULT STDMETHODCALLTYPE IndicateToConsumer( IWbemClassObject* pLogicalConsumer, long lNumObjects, IWbemClassObject** apObjects); } m_XSink; friend XSink; protected: WString m_wsExecutable; CTextTemplate m_CommandLine; CTextTemplate m_title; DWORD m_dwCreationFlags; WString m_wsWorkingDirectory; WString m_wsDesktop; // WString m_wsTitle; DWORD m_dwX; DWORD m_dwY; DWORD m_dwXSize; DWORD m_dwYSize; DWORD m_dwXNumCharacters; DWORD m_dwYNumCharacters; DWORD m_dwFillAttribute; DWORD m_dwStartFlags; DWORD m_dwShowWindow; BOOL m_bInteractive; DWORD m_dwKillTimeout; // how long to wait before killing process, zero is infinite PSID m_pSidCreator; ErrorObj* m_pErrorObj; HRESULT FindInteractiveInfo(); public: WString m_wsWindowStation; public: CCommandLineSink(CLifeControl* pControl = NULL) : CUnk(pControl), m_XSink(this), m_pSidCreator(NULL), m_pErrorObj(NULL) {} HRESULT Initialize(IWbemClassObject* pLogicalConsumer); ~CCommandLineSink() { delete m_pSidCreator; if (m_pErrorObj) m_pErrorObj->Release(); } void* GetInterface(REFIID riid); }; #endif