Поделиться через


Функция IsWow64Process (wow64apiset.h)

Определяет, выполняется ли указанный процесс в WOW64 или Intel64 процессора x64.

Синтаксис

BOOL IsWow64Process(
  [in]  HANDLE hProcess,
  [out] PBOOL  Wow64Process
);

Параметры

[in] hProcess

Дескриптор процесса. Дескриптор должен иметь право доступа PROCESS_QUERY_INFORMATION или PROCESS_QUERY_LIMITED_INFORMATION. Дополнительные сведения см. в "Безопасность процессов и доступ".

Windows Server 2003 и Windows XP: Дескриптор должен иметь право доступа PROCESS_QUERY_INFORMATION.

[out] Wow64Process

Указатель на значение, которое имеет значение TRUE, если процесс выполняется в WOW64 на процессоре Intel64, x64 или ARM64. Если процесс выполняется в 32-разрядной версии Windows, значение имеет значение FALSE. Если процесс представляет собой 32-разрядное приложение, работающее под 64-разрядной версией Windows 10 в ARM, то значение имеет значение FALSE. Если процесс является 64-разрядным приложением, работающим в 64-разрядной версии Windows, значение также имеет значение FALSE.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение является ненулевое значение.

Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.

Замечания

Приложения должны использовать IsWow64Process2 вместо IsWow64Process, чтобы определить, выполняется ли процесс в WOW. IsWow64Process2 удаляет неоднозначность, присущую нескольким средам WOW, явно возвращая архитектуру узла и гостя для данного процесса. Приложения могут использовать эти сведения для надежной идентификации ситуаций, таких как выполнение под эмуляцией в ARM64. Чтобы скомпилировать приложение, использующее эту функцию, определите _WIN32_WINNT как 0x0501 или более поздней версии. Дополнительные сведения см. в разделе Использование заголовков Windows.

Примеры

Для совместимости с операционными системами, не поддерживающими эту функцию, вызовите GetProcAddress, чтобы определить, реализован ли IsWow64Process в Kernel32.dll. Если GetProcAddress успешно, это безопасно для вызова этой функции. В противном случае WOW64 отсутствует. Обратите внимание, что этот метод не является надежным способом определить, является ли операционная система 64-разрядной версией Windows, так как Kernel32.dll в текущих версиях 32-разрядных Windows также содержит эту функцию.

#include <windows.h>
#include <tchar.h>

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

LPFN_ISWOW64PROCESS fnIsWow64Process;

BOOL IsWow64()
{
    BOOL bIsWow64 = FALSE;

    //IsWow64Process is not available on all supported versions of Windows.
    //Use GetModuleHandle to get a handle to the DLL that contains the function
    //and GetProcAddress to get a pointer to the function if available.

    fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
        GetModuleHandle(TEXT("kernel32")),"IsWow64Process");

    if(NULL != fnIsWow64Process)
    {
        if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
        {
            //handle error
        }
    }
    return bIsWow64;
}

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

    return 0;
}

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista, Windows XP с пакетом обновления 2 (SP2) [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2008, Windows Server 2003 с пакетом обновления 1 (SP1) [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка wow64apiset.h (включая Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

GetNativeSystemInfo

IsWow64Message

WOW64