Лекции по СПО4
.docЛабораторная работа 1
Работа с переменными окружения ОС Windows в прикладных программах
Работа рассчитана на 2 часа (1 занятие)
Цель работы: научиться читать переменные окружения ОС Windows c помощью функций Win32® API
Задание: написать программу, в которой выводится список всех переменных окружения ОС:
переменная = значение
подобно тому, как это делает программа из сервиса Windows(Рис 1 – справа)
Рис 1
Основные сведения о переменных окружения
Для поиска программ, выделения пространства памяти определенным программам и контроля программ операционная система Windows требует определенной информации, называемой переменными окружения системы (системные переменные) и пользователя (локальные переменные).
Системные переменные среды заданы заранее в операционной системе и доступны для всех процессов операционной системы Windows. Изменять и добавлять эти переменные могут только пользователи с административными учетными данными (права администратора). Эти переменные наиболее часто используются в сценариях входа в систему.
Локальные переменные среды доступны, только когда пользователь, для которого они были созданы, вошел в систему. Локальные переменные действительны только для текущего пользователя, но определяют поведение глобальной среды операционной системы.
В следующей таблице (Таблица 1.1) приведен список наиболее часто используемых системных и локальных переменных среды для операционной системы Windows.
Таблица 1.1
Переменная |
Тип |
Описание |
%ALLUSERSPROFILE% |
Локальная |
Возвращает размещение профиля приложений используемое всеми пользователями |
%APPDATA% |
Локальная |
Возвращает используемое по умолчанию размещение данных приложений |
%COMPUTERNAME% |
Системная |
Возвращает имя компьютера |
%COMSPEC% |
Системная |
Возвращает путь к исполняемой командной оболочке cmd.exe |
%HOMEDRIVE% |
Системная |
Возвращает имя диска локальной рабочей станции, связанного с основным каталогом пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы» |
%HOMEPATH% |
Системная |
Возвращает полный путь к основному каталогу пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы» |
%HOMESHARE% |
Системная |
Возвращает сетевой путь к общему основному каталогу пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы» |
%LOGONSERVER% |
Локальная |
Возвращает имя контроллера домена, который проверял подлинность текущей сессии |
%NUMBER_OF_PROCESSORS% |
Системная |
Задает количество процессоров, установленных на компьютере |
%OS% |
Системная |
Возвращает имя операционной системы. Windows 2000 отображает операционную систему как Windows NT |
%PATH% |
Системная |
Указывает путь поиска для исполняемых файлов |
%PATHEXT% |
Системная |
Возвращает список расширений файлов, которые рассматриваются операционной системой как исполняемые |
%PROCESSOR_ARCHITECTURE% |
Системная |
Возвращает архитектуру процессора. Возможные значения: x86 и IA64 (Itanium) |
%PROCESSOR_IDENTFIER% |
Системная |
Возвращает описание процессора |
%PROCESSOR_LEVEL% |
Системная |
Возвращает номер модели процессора, установленного на компьютере |
%PROCESSOR_REVISION% |
Системная |
Возвращает номер модификации процессора |
%SYSTEMDRIVE% |
Системная |
Возвращает имя диска, содержащего корневой каталог операционной системы Windows (т.е. системный корневой каталог) |
%SYSTEMROOT% |
Системная |
Возвращает размещение корневого каталога операционной системы Windows |
%TEMP% и %TMP% |
Системная и пользова-тельская |
Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP |
%USERDOMAIN% |
Локальная |
Возвращает имя домена, содержащего список учетных записей пользователей |
%USERNAME% |
Локальная |
Возвращает имя пользователя, выполнившего вход в систему |
%USERPROFILE% |
Локальная |
Возвращает размещение настроек профиля для текущего пользователя |
%WINDIR% |
Локальная |
Возвращает размещение каталога операционной системы |
Эти переменные используются операционной системой WINDOWS и программными процессами функционирующими в системе WINDOWS. Например, хранение временных файлов в момент установки программ (Переменная TEMP или TMP).
Интерпретатор среды WINDOWS, например консоль cmd.exe, проводник WINDOWS, встретив имя переменной %ИМЯ_ПЕРЕМЕННОЙ%, заменяет его значением этой переменной. Таким образом, различные программы и сама операционная система использует одни и те же пути для хранения файлов конфигурации и другую полезную информацию необходимую для организации общих правил поведения программ и хранения группированной (конкретное место хранения общей) конфигурационной информации.
Значение переменной может включать в себя имена ранее объявленных переменных окружения, например %USERPROFILE%\Local Settings\Temp.
Еще одно полезное свойство переменных среды окружения в том, что при запуске приложений на выполнение, например при помощи файлов сценария *.bat; *.cmd и других, можно не указывать весь путь к файлу. Это достигается использованием переменной %PATH%. Значение этой переменной хранит пути, разделенные друг от друга точкой с запятой, по которым происходит поиск программы, которую необходимо запустить на выполнение. Еще одна переменная %PATHEXT% указывает расширения файлов, тех, которые будут запускаться на выполнение. Значения этих переменных хранятся в формате <.><ИМЯ_РАСШИРЕНИЯ> (например .сom), разделенные друг от друга точкой с запятой. Таким образом, операционная система WINDOWS производит поиск по путям %PATHT% только файлов с расширениями %PATHEXT%. Если расширение не было указано, производится поиск по имени с добавлением расширений из переменной %PATHEXT%. На выполнение запускается первый найденный файл, это надо учитывать, если существуют схожие имена файлов расположенные по путям %PATHT%.
Системный реестр и переменные окружения WINDOWS
Системные переменные окружения операционной системы Windows хранятся в системном реестре по пути:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\
Session Manager\Environment
Локальные переменные окружения операционной системы Windows хранятся в системном реестре по пути (для каждого пользователя свои):
HKEY_CURRENT_USER\Environment
Чтение и изменение переменных окружения при
помощи функций Win32® API
Полный список переменных окружения текущего процесса можно прочитать с помощью функции GetEnvironmentStrings, объявленный в файле Windows.h следующим образом:
LPSTR GetEnvironmentStrings (VOID);
Функция возвращает адрес блока строк вида:
имя_переменной = значение
Эти строки можно только прочитать. Изменять значения переменных с помощью этих строк невозможно.
После того как информация из блока переменных окружения извлечена, блок надо удалить функцией FreeEnvironmentStrings:
BOOL FreeEnvironmentStrings (IN LPSTR);
В качестве аргумента LPSTR в нее надо передать адрес, который ранее вернула функция GetEnvironmentStrings.
Получить информацию о значении какой-то конкретной переменной окружения можно функцией GetEnvironmentVariable, которая в файле Winbase.h объявлена следующим образом:
DWORD GetEnvironmentVariable (IN LPCSTR lpName,
OUT LPSTR lpBufer,
OUT DWORD nSize);
Здесь lpName – указатель на строку с именем переменной, а lpBuffer и nSize – буфер и его размер.
Задать значение переменной окружения или создать новую переменную можно функцией SetEnvironmentVariable, объявленной в файле Winbase.h:
BOOL SetEnvironmentVariable
(IN LPCSTR lpName, IN LPCSTR lpValue);
Параметр lpName – это имя переменной, параметр lpValue – задаваемое значение. Если параметр lpValue равен NULL, то переменная lpName удаляется из списка переменных окружения данного процесса. Если переменной с именем lpName нет, и lpValue не равняется NULL, то создается переменная с заданным именем и значением.
Надо учитывать, что функция SetEnvironmentVariable задает значение переменной только для данного процесса. Например, можно изменить значение переменной PATH, включив в него пути, требуемые для конкретного приложения. Но другие приложения будут при этом работать со своими значениями переменных.