我正在尝试通过
WinAPI
模拟一些 hippomocks
函数。我如何从模拟中调用原始/模拟的WinAPI
?
例如,如果我模拟
CreateFile
,我想在我注册的模拟中实现的逻辑:
MockRepository mocks;
mocks.OnCallFunc(::CreateFile).Do(MyCreateFileMock);
是调用原始API,然后记录其输出,然后返回结果。
我尝试在调用模拟之前检索
CreateFile
地址,并将其存储在全局中。当我从模拟内部调用该全局变量时,我最终会再次调用该模拟。
看起来通过 kernelbase.dll
检索
WinAPI地址,而不是从
kernel32.dll
检索它,绕过了 hippomocks 钩子——kernelbase 是实际实现的地方。
因此,通过调用
GetProcAddress(GetModuleHandleA("kerelbase.dll"), "<API_NAME>")
检索地址使我可以毫无问题地从模拟中调用 API。