Функция 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 |