Back

// PSLProcess.h : Declaration of the CPSLProcess

#pragma once
#include "resource.h"       // main symbols
#include "GUIDs.h"
#include "PSLExceptions.h"
#include "SystemInfoAccessor.h"
#include "ProSysLib_i.h"

class ATL_NO_VTABLE CPSLProcess :
   public CComObjectRootEx<CComMultiThreadModel>,
   public CComCoClass<CPSLProcess, &CLSID_PSLProcess>,
   public IDispatchImpl<IPSLProcess, &IID_IPSLProcess, &LIBID_ProSysLib, PSL_HiVersion, PSL_LoVersion>,
   public CPSLException<&CLSID_PSLProcess, &IID_IPSLProcess>
{
public:

   CPSLProcess();

   // Returns false, if the process was ignored;
   bool Initialize(PSYSTEM_PROCESS_INFORMATION pProcess, LPCTSTR sUserName = NULL);

BEGIN_COM_MAP(CPSLProcess)
   COM_INTERFACE_ENTRY(IPSLProcess)
   COM_INTERFACE_ENTRY(IDispatch)
   COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()

   DECLARE_PROTECT_FINAL_CONSTRUCT()
   HRESULT FinalConstruct();
   void FinalRelease();

////////////////////////////
// Interface Implementation:
////////////////////////////

   STDMETHOD(get_ProcessID)(long * pValue);
   STDMETHOD(get_ThreadCount)(long * pValue);
   STDMETHOD(get_HandleCount)(long * pValue);
   STDMETHOD(get_GDICount)(long * pValue);
   STDMETHOD(get_USERCount)(long * pValue);
   STDMETHOD(get_FileName)(BSTR * pValue);
   STDMETHOD(get_FilePath)(BSTR * pValue);
   STDMETHOD(get_CommandLine)(BSTR * pValue);
   STDMETHOD(get_UserName)(BSTR * pValue);
   STDMETHOD(get_DomainName)(BSTR * pValue);
   STDMETHOD(get_Priority)(PSLProcessPriority * pValue);
   STDMETHOD(get_AffinityMask)(VARIANT * pValue);
   STDMETHOD(put_AffinityMask)(VARIANT newValue);
   STDMETHOD(get_Is64Bit)(VARIANT_BOOL * pValue);

   STDMETHOD(Kill)(VARIANT_BOOL * pValue);

private:

   static _bstr_t FilePathFromProcessHandle(HANDLE hProcess);
   static bool GetUserAndDomainFromSID(PSID pSid, tstring & sName, tstring & sDomain);

   void Reset();

   long m_ProcessID; // Process ID;

   long m_ThreadCount; // Number of threads;
   long m_HandleCount; // Number of open handles;
   long m_GDICount;
   long m_USERCount;
   PSLProcessPriority m_Priority;
   ABIG m_AffinityMask;
   bool m_bIs64Bit;

   _bstr_t m_sFileName;
   _bstr_t m_sFilePath;
   _bstr_t m_sCommandLine;
   _bstr_t m_sUserName;
   _bstr_t m_sDomainName;
};

Top