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


Функция 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. Если процесс выполняется в 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]
Целевая платформа Windows
Header 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