In Windows, is there a way to check for the existence of an environment variable for another process? Just need to check existence, not necessarily get value.
I need to do this from code.
In Windows, is there a way to check for the existence of an environment variable for another process? Just need to check existence, not necessarily get value.
I need to do this from code.
If you know the virtual address at which the environment is stored, you can use
OpenProcess
andReadProcessMemory
to read the environment out of the other process. However, to find the virtual address, you'll need to poke around in the Thread Information Block of one of the process' threads.To get that, you'll need to call
GetThreadContext()
after callingSuspendThread()
. But in order to call those, you need a thread handle, which you can get by callingCreateToolhelp32Snapshot
with theTH32CS_SNAPTHREAD
flag to create a snapshot of the process,Thread32First
to get the thread ID of the first thread in the process, andOpenThread
to get a handle to the thread.With a utility:
You can use Process Explorer.
Right click on the process, go to Properties... and there is an Environment tab which lists the environment variables for that process.
With code:
There doesn't appear to be a Win32 API call to do this directly, but apparently you get fiddle with the results of
GetProcessStrings
to get access to this information. This CodeProject article has some code to get you started.