Windows 独立于进程在内存中存储值

Windows 独立于进程在内存中存储值,windows,mfc,winapi,process,communication,Windows,Mfc,Winapi,Process,Communication,我需要一种方法将值暂时存储在某个地方,比如进程a。进程a可以在将值存储在内存中后退出。经过一段时间后,进程B访问相同的内存位置并读取值。我需要存储在内存中,因为我不希望数据在重新启动时保持不变。但只要系统启动,它就独立于过程,数据必须是可访问的。我在windows中尝试了Mailslot和临时文件,它们似乎都有问题,进程引用计数下降到零,实体在内存中不存在。在Windows中,最好使用Win32 API的合适机制是什么 甘尼什 编写一个在启动时启动的服务,并让它创建一些共享内存。 然后,该共享

我需要一种方法将值暂时存储在某个地方,比如进程a。进程a可以在将值存储在内存中后退出。经过一段时间后,进程B访问相同的内存位置并读取值。我需要存储在内存中,因为我不希望数据在重新启动时保持不变。但只要系统启动,它就独立于过程,数据必须是可访问的。我在windows中尝试了Mailslot和临时文件,它们似乎都有问题,进程引用计数下降到零,实体在内存中不存在。在Windows中,最好使用Win32 API的合适机制是什么

  • 甘尼什

    • 编写一个在启动时启动的服务,并让它创建一些共享内存。 然后,该共享内存可以由进程A填充,进程B随后可以读取它

      如果系统重新启动,共享内存将消失,您将拥有一块新的共享内存。
      确保您的服务正确“初始化”共享内存。

      当ProcessA退出时,数据必须驻留在内存中,而不是存储在磁盘上,这有什么原因吗?当您提到临时文件时,我会问,除非ProcessA以意外的方式失败,否则临时文件应该可以工作


      根据您的需要,提供共享/快速/原子数据的好方法是通过。

      尝试以下方法。我不能说我知道这是可行的,但这似乎是合理的


      使用在全局命名空间中创建共享内存文件。然后对目标进程句柄进行调用,并使用比进程A更长的进程。您可以将句柄添加到winlogon.exe,这将在进程A终止时停止销毁共享内存。然后在进程B中,您可以查找共享内存文件。

      好吧,我设法在一个不退出的进程上创建了一个邮件槽,其他两个进程可以作为客户端读写邮件槽服务器。。。即使客户端退出,邮件槽仍然会有数据。。。MailSlot服务器使我能够在MailSlot服务器进程启动时将数据存储在易失性内存中。。或者操作系统启动了。。并在操作系统重新启动时消失。。。感谢所有的想法和帮助……)

      我能做到。。。windows本身是否提供了一些共享服务/设施/API,让我可以存储值,而不是编写共享服务???windows提供了两个相关服务来实现类似的功能-在进程结束后,您可以使用注册表或文件系统来存储内容。但它们是持久的。。。我只需要易失性内存来存储数据。将句柄复制到WinLogon是一个危险的想法。只是因为现在有一个叫做winlogon的过程一直在运行,我认为这并没有被记录下来。如果它消失,你的应用程序将被破坏。另外,将内容注入到您无法控制的进程中,尤其是作为windows一部分的进程中,通常看起来很危险。代码注入是windows API的一部分-请查看SetWindowsHookEx。使用Process Explorer,我看到KACE网络和Check Point软件都已将自己注入到我机器上的winlogon.exe中。向另一个进程添加句柄是合法的。我的主要观点是将句柄添加到比进程寿命更长的进程中。映射文件是一个很好的解决方案。这里有一个MSDN参考,介绍如何创建内存映射文件以及如何从不同的进程中读取。它有代码示例。