Back

#pragma once

#include "GUIDs.h"

class CProSysLibModule : public CAtlDllModuleT< CProSysLibModule >
{
   typedef BOOL (WINAPI * GetProcessHandleCountProc)(HANDLE, PDWORD);
   typedef BOOL (WINAPI * CheckRemoteDebuggerPresentProc)(HANDLE, PBOOL);
   typedef NTSTATUS (WINAPI * NtQueryInformationProcessProc)(HANDLE, long, PVOID, ULONG, PULONG);

public:

   CProSysLibModule();
   ~CProSysLibModule();

   void SetResourceInstance(HINSTANCE hInstance);
   HINSTANCE GetResourceInstance();

   static void InitLibId() throw();
   DECLARE_REGISTRY_APPID_RESOURCEID(IDR_PROSYSLIB, PSL_AppID)

   void OnModuleStart();
   void OnModuleTerminate();

   bool IsWin2000();
   bool InitWinSockets();

   // Windows API functions:
   GetProcessHandleCountProc m_GetProcessHandleCount;
   NtQueryInformationProcessProc m_NtQueryInformationProcess;
   CheckRemoteDebuggerPresentProc m_CheckRemoteDebuggerPresent;

private:

   CRITICAL_SECTION m_cs;

   bool m_bWinSockets;  // Indicates whether WinSockets are being used;

   bool m_bWin2000;  // Indicates whether the current OS is Windows 2000;
                  // If so, then variant types VT_I8 and VT_UI8 are not supported;

   HINSTANCE m_hResInstance;
};

extern class CProSysLibModule _Module;

Top