При загрузке программы DOS, кроме программного сегмента, создает для нее еще и сегмент окружения (environment). Сегмент окружения содержит ASCIIZ-строки, задающие значения некоторых глобальных переменных, они доступны командным файлам и - через PSP - программам. Набор строк окружения заканчивается пустой ASCIIZ-строкой (нулем). В DOS 3.0 и выше за ним следует еще 2-байтное число строк вызова и далее - строка (или строки) вызова программы. Обычно в первую (до строк вызова) часть порождаемой программы копируется содержимое окружения программы-родителя.
При запуске программы из программы суффикс e функции SPAWN указывает на то, что одна или несколько строк окружения будут переданы потомку через массив указателей на строки. Каждая такая строка должна иметь вид
ПЕРЕМЕННАЯ_ОКРУЖЕНИЯ=ЗНАЧЕНИЕ.
Последний указатель в массиве должен быть NULL. Если первый элемент массива является NULL, то процесс – потомок сохраняет то же самое окружение, что и потомок родитель.
В WindXP для просмотра и редактирования необходимо:
|
|
открыть компонент “Панель управления - Система”. На вкладке “дополнительно” окна св-ва системы выбрать “Переменные среды”. В окне будут переменные среды и элементы для работы.
Формат блока переменных окружения.
Это ANSIZ- строки, закрытые нулевой строкой.
Формат строки.
VARNAME value1\0
USERNAME vale\0
…
valueN\0\0
В явном виде строки применяются в файле AutoErec.Dat
В регистре есть элементы, которые содержат группу строк – переменные окружения. Причем 1 ветвь всей системе, 2 – конкретно пользователю.
Модификация разрешена пользователю с правом администрирования.
Информация о наличии переменной окружения и ее значения можно получить с помощью:
GetEnvironmentVariable(…)
Принимает указатель на имя VarName и и возвращает значения в буфер пользователя.
Функция SetEnvironmentVariable
Позволяет удалить, модифицировать значения переменной среды с именем VarName.