>
>
>
Как 32-битной программе узнать, что она…

Андрей Карпов
Статей: 673

Как 32-битной программе узнать, что она запущена в 64-битной Windows?

64-разрядные операционные системы семейства Windows могут исполнять 32-разрядные программы с помощью подсистемы WoW64 (Windows on Windows 64), которая эмулирует 32-битное окружение за счет дополнительной прослойки между 32-битным приложением и 64-битным Windows API.

32-битная программа может узнать, запущена ли она в WoW64, с помощью функции IsWow64Process. Дополнительную информацию о процессоре программа может получить через функцию GetNativeSystemInfo.

Стоит помнить, что функция IsWow64Process включена только в 64-битные версии Windows. Узнать, присутствует ли функция IsWow64Process в системе, и получить к ней доступ, можно при помощи функции GetProcAddress и GetModuleHandle. Пример, демонстрирующий корректное использование функции IsWow64Process (скачать проект):

#include "stdafx.h"

bool IsWow64()
{
  BOOL bIsWow64 = FALSE;

  typedef BOOL (APIENTRY *LPFN_ISWOW64PROCESS)
    (HANDLE, PBOOL);

  LPFN_ISWOW64PROCESS fnIsWow64Process;

  HMODULE module = GetModuleHandle(_T("kernel32"));
  const char funcName[] = "IsWow64Process";
  fnIsWow64Process = (LPFN_ISWOW64PROCESS)
    GetProcAddress(module, funcName);

  if(NULL != fnIsWow64Process)
  {
    if (!fnIsWow64Process(GetCurrentProcess(),
                          &bIsWow64))
      throw std::exception("Unknown error");
  }
  return bIsWow64 != FALSE;
}

void main()
{
  if (IsWow64())
    printf("The process is running under WOW64.\n");
  else
    printf("The process is not running under WOW64.\n");

  printf("\nPress Enter to continue...");
  getchar();
}

Библиографический список