c++ - 在 Winx64 上使用 User32InitializeImmEntryTable?

标签 c++ winapi hook

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/

相关文章:

Express js + Sequelize 和 hook

采用指针的 C++ 显式构造函数

c++ - 比较两个不同列表的内容

c++ - 一行复制构造函数

winapi - Windows API 中提供了哪些定期计时器对象?

c - COM 端口打开时的中断条件

c++ - 是否有理由在 erase-remove 习语之外使用 `remove`?

c++ - 我忘记了什么吗? (适用于 Windows 的双控制台缓冲区)

javascript - Hook Canvas 的 toDataURL

c++ - 让 explorer.exe 从启动时加载我的扩展