Función IsWow64Process (wow64apiset.h)

Determina si el proceso especificado se ejecuta en WOW64 o en un procesador Intel64 de x64.

Sintaxis

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

Parámetros

[in] hProcess

Identificador del proceso. El identificador debe tener el derecho de acceso PROCESS_QUERY_INFORMATION o PROCESS_QUERY_LIMITED_INFORMATION. Para obtener más información, consulte Derechos de acceso y seguridad de procesos.

Windows Server 2003 y Windows XP: El identificador debe tener el derecho de acceso PROCESS_QUERY_INFORMATION.

[out] Wow64Process

Puntero a un valor establecido en TRUE si el proceso se ejecuta en WOW64 en un procesador Intel64 o x64. Si el proceso se ejecuta en Windows de 32 bits, el valor se establece en FALSE. Si el proceso es una aplicación de 32 bits que se ejecuta en Windows 10 de 64 bits en ARM, el valor se establece en FALSE. Si el proceso es una aplicación de 64 bits que se ejecuta en Windows de 64 bits, el valor también se establece en FALSE.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un valor distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Las aplicaciones deben usar IsWow64Process2 en lugar de IsWow64Process para determinar si un proceso se ejecuta en WOW. IsWow64Process2 quita la ambigüedad inherente a varios entornos WOW devolviendo explícitamente la arquitectura del host y el invitado para un proceso determinado. Las aplicaciones pueden usar esta información para identificar de forma confiable situaciones como la ejecución con emulación en ARM64. Para compilar una aplicación que usa esta función, defina _WIN32_WINNT como 0x0501 o posterior. Para obtener más información, vea Usar los encabezados de Windows.

Ejemplos

Para la compatibilidad con sistemas operativos que no admiten esta función, llame a GetProcAddress para detectar si IsWow64Process se implementa en Kernel32.dll. Si GetProcAddress se realiza correctamente, es seguro llamar a esta función. De lo contrario, WOW64 no está presente. Tenga en cuenta que esta técnica no es una manera confiable de detectar si el sistema operativo es una versión de 64 bits de Windows porque el Kernel32.dll en las versiones actuales de Windows de 32 bits también contiene esta función.

#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;
}

Requisitos

   
Cliente mínimo compatible Windows Vista, Windows XP con SP2 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008, Windows Server 2003 con SP1 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wow64apiset.h (incluye Windows.h en Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

GetNativeSystemInfo

IsWow64Message

WOW64