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


Функция IsWow64Message (winuser.h)

Определяет, поступило ли последнее сообщение, прочитанное из очереди текущего потока, из процесса WOW64 .

Синтаксис

BOOL IsWow64Message();

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

Функция возвращает значение TRUE, если последнее сообщение, прочитанное из очереди текущего потока, было получено из процесса WOW64, и false в противном случае.

Комментарии

Эта функция полезна для разработки 64-разрядных собственных приложений, которые могут получать личные сообщения, отправляемые из 32-разрядных клиентских приложений, если сообщения связаны со структурами данных, содержащими данные, зависящие от указателя. В таких ситуациях можно вызвать эту функцию в 64-разрядном собственном приложении, чтобы определить, поступило ли сообщение из процесса WOW64, а затем соответствующим образом отключить сообщение.

Примеры

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

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

typedef BOOL (WINAPI *LPFN_ISWOW64MESSAGE) (void);

LPFN_ISWOW64MESSAGE fnIsWow64Message;

BOOL IsWow64Msg()
{
    // IsWow64Message is not available on all supported versions of Windows
    // Use LoadLibrary to ensure that the DLL containing the function is loaded
    // and GetProcAddress to get a pointer to the function if available.

    fnIsWow64Message = (LPFN_ISWOW64MESSAGE) GetProcAddress(
        LoadLibrary(TEXT("user32")), "IsWow64Message");
  
    if (NULL != fnIsWow64Message)
    {        
        return (fnIsWow64Message());
    }
    else return FALSE;
}

int main( void )
{
    if(IsWow64Msg())
    {
        _tprintf(TEXT("The last message was from a 32-bit process.\n"));
    }
    else if (NULL == fnIsWow64Message )
    {
        _tprintf(TEXT("The IsWow64Message function is not available (%d).\n"), GetLastError());
    }
    else 
    {
        _tprintf(TEXT("The last message was from a 64-bit process.\n"));
    }
    return 0;
}

Требования

   
Минимальная версия клиента Windows Vista, Windows XP с пакетом обновления 2 (SP2) [только классические приложения]
Минимальная версия сервера Windows Server 2008, Windows Server 2003 с пакетом обновления 1 (SP1) [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll

См. также раздел

GetNativeSystemInfo

IsWow64Process

WOW64