从模拟中调用原始/模拟函数

问题描述 投票:0回答:1

我正在尝试通过

WinAPI
模拟一些
hippomocks
函数。我如何从模拟中调用原始/模拟的
WinAPI

例如,如果我模拟

CreateFile
,我想在我注册的模拟中实现的逻辑:

MockRepository mocks;
mocks.OnCallFunc(::CreateFile).Do(MyCreateFileMock);

是调用原始API,然后记录其输出,然后返回结果。

我尝试在调用模拟之前检索

CreateFile
地址,并将其存储在全局中。当我从模拟内部调用该全局变量时,我最终会再次调用该模拟。

c++ winapi hippomocks
1个回答
0
投票

看起来通过 kernelbase.dll 检索

WinAPI
地址,而不是从
kernel32.dll
检索它,绕过了 hippomocks 钩子——kernelbase 是实际实现的地方。

因此,通过调用

GetProcAddress(GetModuleHandleA("kerelbase.dll"), "<API_NAME>")
检索地址使我可以毫无问题地从模拟中调用 API。

© www.soinside.com 2019 - 2024. All rights reserved.