Files
CarlMonitor/LibreHardwareMonitor-0.9.4/InpOut/osversion.cpp
2025-04-07 07:44:27 -07:00

79 lines
1.9 KiB
C++

#include "stdafx.h"
#include "hwinterfacedrv.h"
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
typedef BOOL (WINAPI *LPFN_WOW64DISABLE) (PVOID*);
typedef BOOL (WINAPI *LPFN_WOW64REVERT) (PVOID);
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(_T("kernel32")),"IsWow64Process");
LPFN_WOW64DISABLE fnWow64Disable = (LPFN_WOW64DISABLE)GetProcAddress(GetModuleHandle(_T("kernel32")),"Wow64DisableWow64FsRedirection");
LPFN_WOW64REVERT fnWow64Revert = (LPFN_WOW64REVERT)GetProcAddress(GetModuleHandle(_T("kernel32")),"Wow64RevertWow64FsRedirection");
//Purpose: Return TRUE if we are running in WOW64 (i.e. a 32bit process on XP x64 edition)
BOOL _stdcall IsXP64Bit()
{
#ifdef _M_X64
return TRUE; //Urrr if its a x64 build of the DLL, we MUST be running on X64 nativly!
#endif
BOOL bIsWow64 = FALSE;
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
// handle error
}
}
return bIsWow64;
}
BOOL DisableWOW64(PVOID* oldValue)
{
#ifdef _M_X64
return TRUE; // If were 64b under x64, we dont wanna do anything!
#endif
return fnWow64Disable(oldValue);
}
BOOL RevertWOW64(PVOID* oldValue)
{
#ifdef _M_X64
return TRUE; // If were 64b under x64, we dont wanna do anything!
#endif
return fnWow64Revert (oldValue);
}
int SystemVersion()
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return 0;
}
switch (osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT:
return 2; //WINNT
break;
case VER_PLATFORM_WIN32_WINDOWS:
return 1; //WIN9X
break;
}
return 0;
}