Check for environment variable in another process?

c, c++, permissions, windows-services

Solution

If you know the virtual address at which the environment is stored, you can use `OpenProcess` and `ReadProcessMemory` 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 calling `SuspendThread()`. But in order to call those, you need a thread handle, which you can get by calling `CreateToolhelp32Snapshot` with the `TH32CS_SNAPTHREAD` flag to create a snapshot of the process, `Thread32First` to get the thread ID of the first thread in the process, and `OpenThread` to get a handle to the thread.

Problem

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.

Original source

Related problems