Back
#include "stdafx.h"
#include "resource.h"
#include "ProSysLib_i.h"
#include "ProSysModule.h"
#include "dlldatax.h"
#include "AutoObject.h"
CProSysLibModule _Module;
CProSysLibModule::CProSysLibModule()
{
::InitializeCriticalSection(&m_cs);
m_hResInstance = NULL;
m_bWinSockets = false;
DWORD dwOSVersion = ::GetVersion();
DWORD dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwOSVersion)));
DWORD dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwOSVersion)));
m_bWin2000 = (dwMajorVersion == 5 && !dwMinorVersion);
m_GetProcessHandleCount = NULL;
m_NtQueryInformationProcess = NULL;
m_CheckRemoteDebuggerPresent = NULL;
}
CProSysLibModule::~CProSysLibModule()
{
::DeleteCriticalSection(&m_cs);
}
bool CProSysLibModule::IsWin2000()
{
return m_bWin2000;
}
bool CProSysLibModule::InitWinSockets()
{
CCritSecLock cs(m_cs);
if(m_bWinSockets)
return true; // Already initialized;
// Initialize Windows Socket Support;
WORD wVersionRequested = MAKEWORD(2, 2);
WSADATA wsaData;
m_bWinSockets =::WSAStartup(wVersionRequested, &wsaData)?false:true;
return m_bWinSockets;
}
void CProSysLibModule::SetResourceInstance(HINSTANCE hInstance)
{
m_hResInstance = hInstance;
}
HINSTANCE CProSysLibModule::GetResourceInstance()
{
return m_hResInstance;
}
void CProSysLibModule::InitLibId()
{
CAtlModule::m_libid = LIBID_ProSysLib;
}
void CProSysLibModule::OnModuleStart()
{
// This is where we can initialize global objects;
//
HMODULE hModule = ::GetModuleHandle(_T("kernel32.dll"));
if(hModule)
{
m_GetProcessHandleCount = (GetProcessHandleCountProc)::GetProcAddress(hModule, "GetProcessHandleCount");
m_CheckRemoteDebuggerPresent = (CheckRemoteDebuggerPresentProc)::GetProcAddress(hModule, "CheckRemoteDebuggerPresent");
}
hModule = ::GetModuleHandle(_T("ntdll.dll"));
if(hModule)
m_NtQueryInformationProcess = (NtQueryInformationProcessProc)::GetProcAddress(hModule, "NtQueryInformationProcess");
}
void CProSysLibModule::OnModuleTerminate()
{
// This is where we can uninitialize global objects;
//
// Shutting down WinSockets, if they were in use:
CCritSecLock cs(m_cs);
if(m_bWinSockets)
{
::WSACleanup();
m_bWinSockets = false;
}
cs.Unlock();
}
Top |