在Winx64上使用User32InitializeImmEntryTable?

时间:2015-05-01 15:26:34

标签: c++ winapi hook

https://github.com/jay/gethooks使用User32InitializeImmEntryTable来获取SharedInfo,而SharedInfo又用于获取全局事件挂钩列表。

该程序适用于Win32但不适用于Win7x64,如何修复?

根据您是为Win32还是x64构建,存在单独的问题。

在x64 build上,失败的代码来自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获取创建全局钩子的应用程序列表是一件好事,比如寻找键盘记录器,故障排除或w / e。因此,修复gethooks计划将有益于社区,这最终将被修复。任何downvote,我会立即删除我保证。

1 个答案:

答案 0 :(得分:1)

在Windows 7中,它非常简单:

SHAREDINFO *SharedInfo = (SHAREDINFO *)GetProcAddress(LoadLibraryA("user32"), "gSharedInfo");

但Windows 8/10是一个不同的故事,我将打开一个新问题。