鱼C论坛

 找回密码
 立即注册
查看: 2773|回复: 0

[API档案] IsWow64Process

[复制链接]
发表于 2016-7-9 00:21:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
注:本文档由 百日维新 翻译,小甲鱼校对。

原文链接 -> 传送门

函数功能:

IsWow64Process 函数用于判断指定的进程是否运行在 WOW64(Windows-on-Windows 64-bit,64 位 Windows 操作系统 32 位程序模拟环境)下。


API 函数原型:

注释:_In_ 说明该参数是输入的,_Out_ 说明该参数是输出的
  1. BOOL WINAPI IsWow64Process(
  2.   _In_  HANDLE hProcess,
  3.   _Out_ PBOOL  Wow64Process
  4. );
复制代码


参数解析:

参数 含义
hProcess 1. 指定进程的句柄

2. 该句柄必须有 PROCESS_QUERY_INFORMATION 或 PROCESS_QUERY_LIMITED_INFORMATION 访问权限。更多有关信息,请参见 Process Security and Access Rights

3. Windows Server 2003 和 Windows XP:该句柄必须有 PROCESS_QUERY_INFORMATION 访问权限
Wow64Process1. 指向一个 BOOL 类型变量指针:如果进程运行在 WOW64 下,则设置变量为 TRUE;如果进程运行在 32 位 Windows 操作系统下,则该值设置为 FALSE

2. 如果该进程是 64 位的应用程序运行在 64 位 Windows 操作系统,则该值也设置为 FALSE


返回值:

1. 如果函数调用成功,返回值是非 0;

2. 如果函数调用失败,返回值是 0。

若想获得更多的错误信息,请调用 GetLastError 函数。


备注:

定义 _WIN32_WINNT 为 x0501 或更高版本,以编译使用这个函数的应用程序。更多有关信息,请参见 Using the Windows Headers


例子:

调用 GetProcAddress 函数检测 IsWow64Process 是否在 Kernel32.dll 中实现,获取不支持该函数的操作系统兼容性。如果 GetProcAddress 成功,那么调用这个函数是安全的。否则,WOW64 不存在。注意,这种技术并不是一个可靠的检测操作系统是否为 64 位版本 Windows 方式,因为在当前版本 32 位 Windows 操作系统 Kernel32.dll 中也包含这个函数。

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

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

  4. LPFN_ISWOW64PROCESS fnIsWow64Process;

  5. BOOL IsWow64()
  6. {
  7.     BOOL bIsWow64 = FALSE;

  8.     // 在所有 Windows 支持的版本中没有 IsWow64Process 函数
  9.     // 调用 GetModuleHandle 函数获取包含该函数的 DLL 句柄,
  10.     // 并且调用 GetProcAddress 函数获取得到的函数指针

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

  13.     if(NULL != fnIsWow64Process)
  14.     {
  15.         if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
  16.         {
  17.             // 句柄错误
  18.         }
  19.     }
  20.     return bIsWow64;
  21. }

  22. int main( void )
  23. {
  24.     if(IsWow64())
  25.         _tprintf(TEXT("The process is running under WOW64.\n"));
  26.     else
  27.         _tprintf(TEXT("The process is not running under WOW64.\n"));

  28.     return 0;
  29. }
复制代码


需求:

Minimum supported client Windows 2000 专业版 [仅桌面应用程序]
Minimum supported server Windows 2000 服务器版 [仅桌面应用程序]
Header Winuser.h (包含于 Windows.h)
Library User32.lib
DLL User32.dll


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 22:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表