Exemplo n.º 1
0
int CSysInfo::GetKernelBitness(void)
{
#ifdef TARGET_WINDOWS
  SYSTEM_INFO si;
  GetSystemInfo(&si);
  if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
    return 64;
  
  BOOL (WINAPI *ptrIsWow64) (HANDLE, PBOOL);
  HMODULE hKernel32 = GetModuleHandleA("kernel32");
  if (hKernel32 == NULL)
    return 0; // Can't detect OS
  ptrIsWow64 = (BOOL (WINAPI *) (HANDLE, PBOOL)) GetProcAddress(hKernel32, "IsWow64Process");
  BOOL wow64proc = FALSE;
  if (ptrIsWow64 == NULL || ptrIsWow64(GetCurrentProcess(), &wow64proc) == FALSE)
    return 0; // Can't detect OS
  return (wow64proc == FALSE) ? 32 : 64;
#elif defined(TARGET_POSIX)
  struct utsname un;
  if (uname(&un) == 0)
  {
    std::string machine(un.machine);
    if (machine == "x86_64" || machine == "amd64" || machine == "arm64" || machine == "aarch64" || machine == "ppc64" || machine == "ia64")
      return 64;
    return 32;
  }
  return 0; // can't detect
#else
  return 0; // unknown
#endif
}
Exemplo n.º 2
0
bool CSysInfo::IsOS64bit()
{
#ifdef TARGET_WINDOWS
  SYSTEM_INFO si;
  GetSystemInfo(&si);
  if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
    return true;
  
  BOOL (WINAPI *ptrIsWow64) (HANDLE, PBOOL);
  HMODULE hKernel32 = GetModuleHandleA("kernel32");
  if (hKernel32 == NULL)
    return false; // Can't detect OS
  ptrIsWow64 = (BOOL (WINAPI *) (HANDLE, PBOOL)) GetProcAddress(hKernel32, "IsWow64Process");
  BOOL wow64proc = FALSE;
  if (ptrIsWow64 == NULL || ptrIsWow64(GetCurrentProcess(), &wow64proc) == FALSE)
    return false; // Can't detect OS
  return wow64proc != FALSE;
#else // TARGET_WINDOWS
  // TODO: Implement Linux, FreeBSD, Android, OSX
  return false;
#endif // TARGET_WINDOWS
}