Проверить переменную среды в другом процессе? - PullRequest
6 голосов
/ 29 июля 2009

В Windows есть ли способ проверить наличие переменной окружения для другого процесса? Просто нужно проверить существование, не обязательно получить значение.

Мне нужно сделать это из кода.

Ответы [ 2 ]

8 голосов
/ 30 июля 2009

Если вам известен виртуальный адрес, по которому хранится среда, вы можете использовать OpenProcess и ReadProcessMemory для считывания среды из другого процесса.Однако, чтобы найти виртуальный адрес, вам нужно покопаться в блоке информации о потоках одного из потоков процесса.

Чтобы получить его, вам нужно вызватьGetThreadContext() после звонка SuspendThread().Но чтобы вызвать их, вам нужен дескриптор потока, который можно получить, вызвав CreateToolhelp32Snapshot с флагом TH32CS_SNAPTHREAD, чтобы создать снимок процесса, Thread32First чтобы получить идентификатор первого потока в процессе, и OpenThread, чтобы получить дескриптор потока.

1 голос
/ 30 июля 2009

С утилитой:

Вы можете использовать Process Explorer .

Щелкните правой кнопкой мыши по процессу, перейдите к Свойства ... и откроется вкладка Среда , в которой перечислены переменные среды для этого процесса.

С кодом:

Кажется, что нет вызова Win32 API, чтобы сделать это напрямую, но, очевидно, вы получите путаницу с результатами GetProcessStrings, чтобы получить доступ к этой информации. Эта статья CodeProject содержит некоторый код для начала работы.

...