User32InitializeImmEntryTable 被 https://github.com/jay/gethooks 使用获取 SharedInfo,后者又用于获取全局事件 Hook 列表。
该程序适用于 Win32 但不适用于 Win7x64,如何解决?
存在不同的问题,具体取决于您是为 Win32 还是 x64 构建。
在 x64 构建中,有问题的代码来自 prog.c:
p = (char *)User32InitializeImmEntryTable;
for( i = 0; i < 127; ++i )
{
if( ( *p++ == 0x50 ) && ( *p == 0x68 ) )
{
*( (char *)&SharedInfo + 0 ) = *++p;
*( (char *)&SharedInfo + 1 ) = *++p;
*( (char *)&SharedInfo + 2 ) = *++p;
*( (char *)&SharedInfo + 3 ) = *++p;
break;
}
}
未找到 0x50、0x68(推送 eax)。
在 Win32 上构建上述工作,但 EnumDesktopsW 在 desktop.c 的函数 add_all_desktops 中不工作。
此外,我不确定修复该部分是否能让程序在 x64 上正常运行,但我想这是一个开始。我也不确定构建 Win32 或 x64 可执行文件哪个更好,哪个更容易让它工作?
我希望这是一个好的问题,AFAIK 获取创建全局 Hook 的应用程序列表是一件好事,比如查找键盘记录器、故障排除或 w/e。因此,修复该 gethooks 程序将使社区受益,无论哪种方式最终都会得到修复。任何反对票,我保证会立即删除。
最佳答案
在 Windows 7 中非常简单:
SHAREDINFO *SharedInfo = (SHAREDINFO *)GetProcAddress(LoadLibraryA("user32"), "gSharedInfo");
但 Windows 8/10 是另一回事,我将提出一个新问题。
关于c++ - 在 Winx64 上使用 User32InitializeImmEntryTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989801/