检查另一个进程中的环境变量?

问题描述:

在Windows中,有没有办法检查另一个进程是否存在环境变量?只需要检查存在,不一定会得到价值。检查另一个进程中的环境变量?

我需要从代码做到这一点。

如果您知道存储环境的虚拟地址,则可以使用OpenProcessReadProcessMemory来读取其他进程以外的环境。但是,要查找虚拟地址,您需要在其中一个进程的线程的Thread Information Block四处寻找。

为了达到这个目的,您需要致电SuspendThread()后致电GetThreadContext()。但为了调用这些线程,您需要一个线程句柄,您可以通过调用CreateToolhelp32SnapshotTH32CS_SNAPTHREAD标志来创建进程的快照,Thread32First以获取进程中第一个线程的线程ID,并获得OpenThread线程的句柄。

+0

+1伟大的答案。你仍然需要仔细研究一下以找到线程上下文结构的定义。新台币DDK和葡萄酒是这种事情的好地方。看起来也许这是从结构开始的第8个指针? – 2009-07-30 00:30:46

使用工具:

您可以使用Process Explorer

右键单击该进程,去属性...并且有一个环境选项卡,其中列出了该进程的环境变量。

随着代码:

似乎没有成为一个Win32 API调用直接做到这一点,但显然你摆弄的GetProcessStrings结果以访问这些信息。 This CodeProject article有一些代码让你开始。

+0

谢谢,但应该澄清寻找一种方法来做到这一点从代码... – jalex 2009-07-29 20:11:20