如何允许由另一个进程创建的进程,使用创建者进程的一部分内存?

时间:2010-08-26 08:23:44

标签: c++ memory command-line process console

我有两个控制台进程,第一个是第一个使用下面的API创建的:

BOOL WINAPI CreateProcess(
  __in_opt     LPCTSTR lpApplicationName,
  __inout_opt  LPTSTR lpCommandLine,
  __in_opt     LPSECURITY_ATTRIBUTES lpProcessAttributes,
  __in_opt     LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in         BOOL bInheritHandles,
  __in         DWORD dwCreationFlags,
  __in_opt     LPVOID lpEnvironment,
  __in_opt     LPCTSTR lpCurrentDirectory,
  __in         LPSTARTUPINFO lpStartupInfo,
  __out        LPPROCESS_INFORMATION lpProcessInformation
);

现在我想知道如果我将指针传递给第一个进程的一部分内存,通过 IpCommandLine 到第一个进程调用的第二个进程,将读取该指针的内存点,第二个进程肯定会导致访问冲突错误或是否受到该API的某些参数值的影响? 如果我不能单独使用此API,我建议您使用哪种方法进行访问?

5 个答案:

答案 0 :(得分:2)

您可以使用ReadProcessMemory / WriteProcessMemory API访问此内存。另一个进程需要知道内存地址和访问其内存的进程句柄。

答案 1 :(得分:0)

这是我不知情的意见(在Windows上没有做太多这样的事情):

单独的进程(几乎按定义)通常无法直接访问彼此的内存空间 。因此,您应该使用进程间通信之一(提示:这是您google的内容)方法。

我在这方面对Windows知之甚少,但是会想到套接字,管道,内存映射文件和各种形式的RPC之类的东西。当然,这取决于您的实际用例。

答案 2 :(得分:0)

Alex Farber的回答是正确的;您可以使用Win32 API调用来读取另一个进程的内存。但是,这可能是一个坏主意。如果要移动数据,可以将其作为参数传递给命令行,也可以将句柄传递给其他进程并使用管道连接这两个进程。

答案 3 :(得分:0)

我之前用#pragma's完成了这个。我目前没有实际的代码,但我认为类似的东西可能适用于Visual Studio 2008 C ++:

//put this code in a dll that both processes link to 
#pragma section("shared",read,write,shared)

__declspec(allocate("shared"))
int i = 0;  // in theory, both processes should be able to access and modify i

答案 4 :(得分:-1)

我相信使用volatile会让其他进程访问内存。当然它需要一个指向它的指针