Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционные системы и среды. В 2 частях. Ч.1. Курс лекций
.pdf
на компьютере. Это касается ОС семейства Windows NT, а в ОС
Windows 98/Me эти ограничения не действуют. Учет прав пользователя крайне важен, поскольку программы, взаимодействующие с реестром, могут не иметь доступа к тем или иным
ключам в зависимости от прав пользователя. Полный доступ
к реестру имеют программы, запускаемые в режиме администратора или пользователей с правами администратора.
Таблица 7.4
Значения типов доступа к ключам реестра
Значение параметра Описание параметра
KEY_ALL_ACCESS Комбинация значений всех масок безопасно-
сти для доступа: KEY_QUERY_VALUE, KEY_
ENUMERATE_SUB_KEYS, KEY_NOTIFY,
KEY_CREATE_SUB_KEY, KEY_CREATE_LINK,
и KEY_SET_VALUE
KEY_CREATE_LINK Разрешение создания символической ссылки
KEY_CREATE_SUB_
KEY
KEY_ENUMERATE_
SUB_KEYS
KEY_EXECUTE Разрешение для чтения
KEY_NOTIFY Разрешение для уведомления об изменении
KEY_QUERY_
VALUE
KEY_READ Комбинация масок безопасности: KEY_QUERY_
KEY_SET_VALUE Разрешение установки значения подключа
KEY_WRITE Комбинация масок доступа KEY_SET_VALUE и KEY_
Разрешение создания подключа
Разрешение перечисления (перебора) подключей
Разрешение для запроса значения подключа
VALUE, KEY_ENUMERATE_SUB_KEYS и KEY_
NOTIFY
CREATE_SUB_KEY
Рассмотрим некоторые функции, которые предоставляют-
ся классом объектов TRegistry.
Функция CreateKey предназначена для создания нового клю-
ча в реестре. Входным параметром функции является имя ключа, который нужно создавать. Ключ может быть абсолютным или
относительным параметром. Абсолютный ключ начинается со
знака «\» и подключа главного (корневого) ключа. Относительный ключ – это подключ текущего ключа. После создания ключа
81

он не имеет никакого значения и его надо установить с помощью
специальных функций, таких как WriteBinaryData, WriteBool,
WriteCurrency, WriteDate, WriteDateTime, WriteExpandString,
WriteFloat, WriteInteger, WriteString, WriteTime.
Функция CreateKey возвращает значение True, если создание нового ключа прошло успешно. Попытка создания ключа,
который уже существует, не приводит ни к какому результату.
Функция CreateKey позволяет создавать ключи с уровнем
доступа «для всех». Если необходимо создать ключи со специальным уровнем доступа, то необходимо напрямую вызывать
функции Windows API.
Функция DeleteKey предназначена для удаления существующего ключа в реестре. Она возвращает значение True, если
удаление прошло успешно.
Функция CloseKey используется для закрытия текущего
ключа. Перед закрытием будет осуществлена запись текущего
ключа. Вызов этой функции без текущего ключа не дает никакого эффекта.
Функция DeleteValue используется для удаления значения
из текущего ключа. Параметром, передаваемым в эту функцию,
является строка, которая содержит значение, которое надо удалить. Ключ может содержать несколько значений, и каждое из
этих значений должно иметь уникальное имя. Функция возвращает значение True, если удаление прошло успешно.
Функции GetDataInfo, GetDataSize, GetDataType, GetKeyInfo,
GetKeyNames, GetValueNames предназначены для получения информации.
Функция HasSubKeys позволяет определить, существует
ли заданный подключ. Если он существует, то возвращается
значение True.
Функция KeyExists дает возможность определить, существует ли заданный ключ реестра с указанным именем. Функция
возвращает значение True если ключ существует.
Функция LoadKey позволяет создать подключ в указанном
корневом ключе и загрузить информацию из файла в созданный
ключ. Файл, который загружается в реестр, должен содержать
данные о значениях, подключах и значения для этих подключей. Перед вызовом этой функции значение свойства RootKey
82

объекта TRegistry должно быть установлено в HKEY_USERS,
HKEY_LOCAL_MACHINE или в то значение, которое будет возвращено функцией RegistryConnect.
Параметр «имя файла», передаваемый в функцию, не должен содержать расширение, если программа будет обращаться
к данным, расположенным в файловой системе FAT. Загружаемый файл необходимо создавать вручную в соответствии со специальным требованиями либо с помощью функции SaveKey
из объекта TRegistry или RegSaveKey из Windows API.
Функция MoveKey позволяет перемещать существующий
ключ реестра вместе со всем его содержимым в указанный
ключ. Функция имеет два параметра. Первый параметр указывает на старый ключ, откуда необходимо перемещать данные,
а второй параметр содержит ключ, куда необходимо перемещать данные. Если указанный новый ключ не существует, то он
будет создан.
Функция OpenKey дает возможность открыть указанный
ключ. Функция возвращает значение True, если открытие произошло успешно. Также функция имеет дополнительный параметр, который указывает на необходимость создания ключа
в случае, если он не существует.
Функция OpenKeyReadOnly позволяет открывать ключ
только для чтения. Функция возвращает значение True, если
открытие произошло успешно.
Функции ReadBinaryData, ReadBool, ReadCurrency, ReadDate, ReadDateTime, ReadFloat, ReadInteger, ReadString, ReadTime позволяют прочитать из реестра данные соответствующего типа.
С помощью функции RegistryConnect осуществляется подключение к реестру другого компьютера, подключенного к
сети. Передаваемый параметр – это имя удаленного компьютера. Перед вызовом этой функции необходимо установить свойство RootKey объекта TRegistry в значения HKEY_USERS или
HKEY_LOCAL_MACHINE. Функция возвращает значение
True, если открытие реестра прошло успешно.
Функция RenameValue позволяет изменять имя значения,
ассоциированного с текущим ключом. Функция имеет два парметра – старое и новое имя значения.
83

Функция ReplaceKey дает возможность осуществлять замену
указанного ключа данными, сохраненными в файле. Функция
возвращает значение True, если замена ключа произошла успешно. Файл должен быть сохранен с помощью функций SaveKey
объекта TRegistry или RegSaveKey функции API Windows. Если
на компьютере используется файловая система FAT, то имя файла не должно содержать расширение.
Функция SaveKey позволяет сохранить данные и подключить файл на диске из указанного ключа (подключа). При вызове этой функции будет использован уровень безопасности
KEY_ALL_ACCESS. Если на компьютере используется файловая система FAT, то имя файла не должно содержать расширение. Если функция выполняется успешно, то возвращается
значение True и ключ закрывается.
С использованием функции ValueExists определяется наличие данных для указанного ключа реестра. Эту функцию
можно использовать для проверки наличия данных перед вызовом других функций записи и модификации реестра.
Функции WriteBinaryData, WriteBool, WriteCurrency, WriteDate, WriteDateTime, WriteExpandString, WriteFloat, WriteInteger, WriteString, WriteTime позволяют записывать данные в реестр соответствующего типа.
Функции API Windows для работы с реестром полностью
аналогичны. Ниже приведен фрагмент программы, который демонстрирует использование функций класса TRegistry.
Пример 7.2. Получение списка программного обеспечения,
установленного на компьютере (с использованием функций API
Windows):
//Функцииполучения списка установленного ПО Используемыетипыданных:
type
TInstallAppItem = class(TObject)
public
Apps:TStringList;
AppInfo:TInstallAppInfo;
constructorCreate;
84

destructorDestroy;override;
procedureCollect;
end;
var
UninstallKey : String= ‘Software\Microsoft\Windows\
CurrentVersion\Uninstall’;
Implementation
//Получитьимяустановленнойпрограммы
procedure GetApplicationName( var List : TStringList ;
Key : HKEY;
ObjectName:PChar);
var
hObject:HKEY;
szName:PByte;
szUnStr:PByte;
dwType,
dwBufSize,
dwBufSize1:DWord;
begin
dwBufSize:=MAX_PATH;
dwBufSize1:=MAX_PATH;
GetMem(szName,MAX_PATH+1);
GetMem(szUnStr,MAX_PATH+1);
if RegOpenKeyEx( Key, ObjectName, 0, KEY_READ,
hObject)=ERROR_SUCCESSthen begin
if
( RegQueryValueEx( hObject, ‘DisplayName’,nil, @
dwType,szName,@dwBufSize)=ERROR_SUCCESS)and
(RegQueryValueEx(hObject,‘UninstallString’,nil,
@dwType,szUnStr,@dwBufSize1)=ERROR_SUCCESS)
then
List.Add( PChar(szName) );
end;
RegCloseKey(hObject);
85

Dispose(szName);
Dispose(szUnStr);
end;
//Получитьсписок установленного ПО procedure GetIn
-
stallApplication(varList:TStringList);
var
hUninstall:HKEY;
szObject:PChar;
dwIndex1,dwBufSize:DWord;
begin
GetMem(szObject,MAX_PATH+1);
if RegOpenKeyEx( HKEY_LOCAL_MACHINE,
PChar(UninstallKey),0, KEY_READ,hUninstall) =ERROR_
SUCCESSthen begin
dwBufSize:=MAX_PATH;
dwIndex1:=0;
whileRegEnumKeyEx(hUninstall,dwIndex1,szObject,
dwBufSize,nil,nil,nil,nil)=ERROR_SUCCESSdo begin
GetApplicationName(List,hUninstall,szObject);
Inc(dwIndex1);
dwBufSize:=MAX_PATH;
end;
RegCloseKey(hUninstall);
end;
Dispose(szObject);
end;
Для модификации (добавления) большого количества данных в реестр можно использовать REG-файлы – простые текстовые ASCII-файлы с информацией о содержимом реестра. REGфайл можно создать с использованием программы REGEDIT
с помощью пункта меню Export этой программы. Также REGфайл можно создать самостоятельно, используя любой текстовый редактор. Ниже приведен пример такого файла:
WindowsRegistryEditorVersion5.00
86

[HKEY_CURRENT_USER\Software\MyProgram\1.0]
[HKEY_CURRENT_USER\Software\MyProgram\1.0\Current]
«Parametr1»=dword:00000001
[HKEY_CURRENT_USER\Software\MyProgram\1.0\Current\
Start]
«ProgramStart»=hex:00,00,00,00
«DefaultPath»=«C:\\ProgramFiles\\MyProgram»
@=«C:\\ProgramFiles\\MyProgram\\Database»
Такой REG-файл можно использовать для внесения информации в реестр с помощью функции LoadKey или путем запуска этого файла из программы Windows Explorer.
В первой строке файла содержится информация, которая
указывает на версию программы REGEDIT, с использованием
которой был создан данный файл. При создании собственного
REG-файла с помощью текстового редактора необходимо поместить это ключевое слово в начале файла. Структура файла
следующая. После первой строки размещается имя ключа в квадратных скобках, затем можно разместить одну или несколько пар «имя/значение». Знак @ обозначает значение ключа
по умолчанию. Имена и значения должны быть заключены в кавычки за исключением символа «?», который соответствует значению по умолчанию. Вместо символа «\» следует использовать
«\\» (два подряд идущих символа). В конце файла следует добавить пустую строку, иначе REGEDIT может проигнорировать
последнюю строку файла.
Существует и другой способ модификации реестра – это использование INF-файлов. Обычно эти файлы применяются для
установки драйверов устройств, но с помощью INF-файлов также можно управлять добавлением и удалением записей реестра.
87

ЛЕКЦИЯ 8.
Командная строка в ОС Windows.
Основные команды и параметры
Консоль командной строки присутствует во всех версиях
ОС Windows. Ранние версии ОС поддерживали режим MS-DOS
напрямую, что позволяло выполнять простые команды прямо
из консоли. Представители же семейства NT, такие как Windows XP, Windows 7 или Windows Server 2008, работают уже
совсем по другим принципам, однако MS-DOS в них тоже поддерживается, но через виртуальную машину (NT Virtual DOS
Machine, NTVDM), что позволяет контролировать и администрировать системные ресурсы напрямую из консоли командного режима.
Для работы с командной строкой имеется встроенный ин-
терпретатор команд, который используется для выполнения
вводимых с клавиатуры команд. В технической литературе
можно встретить другие названия интерпретатора команд, такие как командный интерпретатор, командный процессор,
командная строка, командная оболочка.
При стандартной установке командный интерпретатор хранится на диске под именем cmd.exe в папке \Windows\System32.
Размер файла в Windows 7 равен 295 Кб, в Windows XP SP3 –
387 Кб.
Значимость командной строки состоит в том, что некоторые
возможности ОС Windows доступны только при использовании
командной строки. Кроме того, ключи командной строки перекрывают значения, задаваемые параметрами реестра Windows.
Существует два способа запуска интерпретатора командной
строки.
Первый способ, самый быстродействующий и простой,
подразумевает выполнение следующих шагов (рис. 8.1, 8.2):
• нажать на клавишу с логотипом «Windows + R»;
• После того как откроется окно «Выполнить», введите ко-
манду cmd, нажмите на кнопку «OK».
В случае необходимости при запуске интерпретатора командной строки можно указать ключи, управляющие работой
88

командной строки. С помощью ключей можно, например, запустить командную строку с отключением эхо-вывода («тихий»
режим), определить, как будет вести себя окно командной строки после выполнения команды, указать, какая кодировка –
ANSI или Unicode – будет использована при выводе результатов
выполнения команды в файл. В табл. 8.1 приведены основные
ключи, доступные при запуске командной строки.
Рис. 8.1. Запуск командного интерпретатора в ОС Windows 7
и выше
Рис. 8.2. Запуск командного интерпретатора
в ОС Windows XP
Ключи управления запуском интерпретатора командной строки
Ключ Описание ключа
/с Указывает, что командная оболочка должна выпол-
нить текущую команду и завершить свою работу
/k Указывает, что командная оболочка должна выпол-
нить текущую команду и остаться в интерактивном
режиме
89
использования
cmd /c «dir c:»
cmd /k «dir c:»
Таблица 8.1
Пример

Окончание табл. 8.1
Ключ Описание ключа
/a Устанавливает для вывода в файл ANSI-кодировку cmd /a
/u Устанавливает для вывода в файл Unicode-кодировку cmd /u
/q Отключает эхо-вывод cmd /q
/t:FG Задает цвета текста и фона окна командной строки cmd /t:F1
Пример
использования
Второй способ запуска командного интерпретатора заключается в последовательном выборе пиктограмм и пунктов меню:
• Windows XP: «Пуск» → «Программы» → «Стандартные» →
«Командная строка»;
• Windows 7 и выше: «Пуск» → «Все программы» → «Стан-
дартные» → «Командная строка».
Независимо от способа запуска будет открыто окно интерпретатора командной строки, вид которого для разных версий
ОС Windows представлен на рис. 8.3, 8.4.
Рис. 8.3. Вид окна интерпретатора командной строки в ОС
Windows 7
Рис. 8.4. Вид окна интерпретатора командной строки в ОС
Windows XP
Для выполнения некоторых команд могут потребоваться
права администратора. В ОС Windows 7, если текущий пользо-
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
