我有两个控制台进程,第一个是第一个使用下面的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,我建议您使用哪种方法进行访问?
答案 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会让其他进程访问内存。当然它需要一个指向它的指针