2016-08-11 1 views
2

Я пытаюсь сделать все возможное, чтобы перенести продукт компании, написанный и сильно опираясь на Unix, в сборку, совместимую с Windows. Это не так хорошо. У меня две разные ветви развития с двумя разными проблемами. В этой проблеме я должен передать то, что по существу является оболочкой для функции Unix clearenv(), которая полностью очищает все переменные пользовательской среды из таблицы. Вероятно, из соображений безопасности я не смог найти эквивалент clearenv() для Windows, и одно решение, которое я нашел/придумал, уничтожит все переменные среды в процессе, включая системные переменные. Я хочу решение, которое избавится от всех переменных пользовательской среды, но не коснется системных.Как полностью очистить все переменные пользовательской среды в Windows C++

Я знаю, что это может быть глупая вещь, но это в коде, поэтому я должен попытаться ее портировать.

Кроме того, если это поможет, я компиляции под MinGW

ответ

1

Из документации для CreateEnvironmentBlock:

hToken [в, по выбору] [...] Если этот параметр равен NULL, возвращенный блок среды содержит только системные переменные.

По-прежнему будет немного грязным, чтобы пройти через блок среды процесса и изменить его в соответствии с блоком «только система», который возвращает эта функция, но по крайней мере у вас будет необходимая информация.

1

вы можете написать простую функцию для удаления текущей переменной окружения.

Во-первых, вы можете использовать функцию CreateEnvironmentBlock для извлечения блока, который содержит весь массив ключей.

во-вторых, использовать функцию SetEnvironmentVariable для того, чтобы закодировать весь ключ со значением NULL, это приведет к удалению значения среды.