Windows 如何使用内存映射文件中的链表创建队列并从另一个进程中读取?

Windows 如何使用内存映射文件中的链表创建队列并从另一个进程中读取?,windows,queue,ipc,memory-mapped-files,api-hook,Windows,Queue,Ipc,Memory Mapped Files,Api Hook,我编写了一个简单的测试代码,将我的挂接dll注入到一些Windows应用程序(explorer.exe,notepad.exe等),在这些目标应用程序中,我使用EasyHook库挂接了Win32 API函数,如CopyFileEx,CreateFile。在我的挂钩函数中,例如Hooked_CopyFileExW,我需要从目标进程向我的应用程序发送一条事件消息(包含源文件路径、目标进程的pid等)。在收到来自我的应用程序的消息后,根据文件的内容,我将决定完成复制操作或阻止它。我还需要源路径和目标路

我编写了一个简单的测试代码,将我的挂接dll注入到一些Windows应用程序(
explorer.exe
notepad.exe
等),在这些目标应用程序中,我使用EasyHook库挂接了Win32 API函数,如
CopyFileEx
CreateFile
。在我的挂钩函数中,例如
Hooked_CopyFileExW
,我需要从目标进程向我的应用程序发送一条事件消息(包含源文件路径、目标进程的pid等)。在收到来自我的应用程序的消息后,根据文件的内容,我将决定完成复制操作或阻止它。我还需要源路径和目标路径来记录日志。我决定使用内存映射文件发送这些文件名信息,因为这是一种有效的方法

我的目的是在内存映射文件中创建一个队列来组织事件。这是一种生产者-消费者问题

如何在内存映射文件中使用链表实现这样的队列?


我知道如何使用数组,但我想使用链表。我觉得链表是一种更好的方法,因为它可以在每次排队和退队操作中动态地增长和收缩。哪种方法更方便?如果是链表,我们将不胜感激。我不知道如何处理每个链表节点中的指针,因为内存映射文件中的内存块是连续的,只有一个起始地址。或者除此之外,您还推荐其他方法来完成此任务吗?

阵列也可以增长和收缩,并且更易于实现。但是你不需要数组或链表。您应该使用互斥锁保护对共享内存的访问,钩子上的事件将截获的数据写入内存,设置一个事件,您的筛选应用程序应该等待此事件,处理数据并将结果写入共享内存,设置另一个事件,您的钩子将等待此事件,接收筛选结果,释放互斥锁并将结果应用于钩住的API。