问题是在没有请求的功能的旧机器上运行代码。要检查它,请使用LoadLibrary
和GetProcAddress
作为演示here,但GetProcAddress
在使用之前需要TypeDef
中的函数地址。登记/>
例如,将这两个用于XP SP2 32位:
typedef BOOL (__stdcall *LPFN_Wow64RevertWow64FsRedirection) (PVOID OldValue);
typedef BOOL (__stdcall *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
...
...
LPFN_Wow64RevertWow64FsRedirection wowRevert = NULL;
LPFN_Wow64DisableWow64FsRedirection wowDisable = NULL;
HINSTANCE hLib;
if(GetProcAddresses( &hLib, "kernel32.dll", 2, &wowRevert,_
"Wow64RevertWow64FsRedirection", &wowDisable, Wow64DisableWow64FsRedirection" ))
{...
代码崩溃在这里:
程序入口点Wow64RevertWow64FsRedirection无法在动态链接库Kernel32.dll中找到
使用非WINAPI typedef实现我们自己的自定义Wow64RevertWow64FsRedirection
很容易,但是当kernel32.dll中的函数存在时,如何用基类型替换它们?