Back

// PSLProcesses.h : Declaration of the CPSLProcesses

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

DECLARE_PSL_COLLECTION(Processes, Process);

class ATL_NO_VTABLE CPSLProcesses:
   public CComObjectRootEx<CComMultiThreadModel>,
   public CComCoClass<CPSLProcesses, &CLSID_PSLProcesses>,
   public CProcessesCollection,
   public CPSLException<&CLSID_PSLProcesses, &IID_IPSLProcesses>
{
public:

   CPSLProcesses();
   ~CPSLProcesses();

   static bool Is64BitProcess(HANDLE hProcess);

BEGIN_COM_MAP(CPSLProcesses)
   COM_INTERFACE_ENTRY(IPSLProcesses)
   COM_INTERFACE_ENTRY(IDispatch)
   COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()

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

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

   STDMETHOD(get_EnumUserType)(PSLEnumUserType * pValue);
   STDMETHOD(put_EnumUserType)(PSLEnumUserType newValue);
   STDMETHOD(Find)(long ProcessID, IPSLProcess ** ppValue);
   STDMETHOD(Update)();

protected:

   virtual HRESULT OnIndexOutOfRange();
   virtual HRESULT OnInterfaceAccess();

private:

   typedef BOOL (WINAPI * IsWow64ProcessProc)(HANDLE hProcess, PBOOL Wow64Process);
   static IsWow64ProcessProc m_IsWow64Process;
   static HMODULE m_hKernelModule;

   PSLEnumUserType m_EnumType;
   _bstr_t m_sUserName; // Current User Name;

   bool m_bDirty; // When set, means that either there's no data or data
               // is out of date and needs to be updated;
   static ULONG m_BufferSize; // Default buffer size when querying for processes;

   void InternalUpdate(bool bForceUpdate);
};

Top