gpt4 book ai didi

c++ - 在 DLL 中打开共享文件

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:36 25 4
gpt4 key购买 nike

我正在使用 Windows Hooks 制作键盘记录器。代码在 DLL 中。键入的字符将写入文件。但是问题是,除了焦点在我的应用程序窗口上的字符外,没有任何字符被记录到文件中。FILE * 已在共享内存段中声明。

    #pragma data_seg("SHARED")
.
.
FILE* iFile = NULL;
#pragma data_seg()

如果我在钩子(Hook)函数中打开文件,一切似乎都很好。

    EXPORT LRESULT CALLBACK KHookProc(int nCode, WPARAM wparam, LPARAM lparam)
{
.
.
.
iFile = fopen("c:\\games\\log.txt","a+");
fwrite((char *)(&c),1,1,iFile);
fclose(iFile);

}
}

如果我在设置钩子(Hook)(所有进程通用)时打开它,除了我的应用程序击键外,没有任何东西被捕获。

EXPORT void SetKBHook()
{
if(hhook==NULL)
{
hhook = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KHookProc,g_hinstance,NULL);
if(hhook == NULL)
{
DWORD err = GetLastError();
err;
}

iFile = fopen("c:\\games\\log.txt","a+");
}
}

帮助。有人吗?

最佳答案

虽然指针变量可以在进程之间共享(如果您将正确的参数传递给链接器),但 FILE* 指向的堆分配数据结构和底层 Win32 文件句柄(以及关联的内核-模式文件对象)是共享的。

您最好在单个进程(启动键盘记录器的进程)中打开文件句柄,然后使用 IPC 机制将数据传输回此进程,然后该进程将处理(适当同步的)写入。

这对于任何类型的合法键盘记录目的都可以正常工作,并且可以避免尝试将文件句柄共享到您没有启动自己的进程中时遇到的很多麻烦......更不用说如果您第一次成功了同步忧郁症任务。

关于c++ - 在 DLL 中打开共享文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10623378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com