Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы и среды. В 2 частях. Ч.1. Курс лекций

.pdf
Скачиваний:
6
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
на компьютере. Это касается ОС семейства 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, Read­Date, ReadDateTime, ReadFloat, ReadInteger, ReadString, Read­Time позволяют прочитать из реестра данные соответствующе­го типа.
С помощью функции 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, Write­Date, WriteDateTime, WriteExpandString, WriteFloat, WriteInte­ger, WriteString, WriteTime позволяют записывать данные в ре­естр соответствующего типа.
Функции API Windows для работы с реестром полностью аналогичны. Ниже приведен фрагмент программы, который де­монстрирует использование функций класса TRegistry.
Пример 7.2. Получение списка программного обеспечения, установленного на компьютере (с использованием функций API Windows):
//Функцииполучения списка установленного ПО Исполь­зуемыетипыданных:
type
TInstallAppItem = class(TObject)
public
Apps:TStringList;
AppInfo:TInstallAppInfo;
constructorCreate;
84
destructorDestroy;override;
procedureCollect;
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_SUCCESSthen 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(varList: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_ SUCCESSthen begin
dwBufSize:=MAX_PATH;
dwIndex1:=0; whileRegEnumKeyEx(hUninstall,dwIndex1,szObject,
dwBufSize,nil,nil,nil,nil)=ERROR_SUCCESSdo begin
GetApplicationName(List,hUninstall,szObject);  Inc(dwIndex1);  dwBufSize:=MAX_PATH;
end;
RegCloseKey(hUninstall);
end;
Dispose(szObject);
end;
Для модификации (добавления) большого количества дан­ных в реестр можно использовать REG-файлы – простые тексто­вые ASCII-файлы с информацией о содержимом реестра. REG­файл можно создать с использованием программы REGEDIT с помощью пункта меню Export этой программы. Также REG­файл можно создать самостоятельно, используя любой тексто­вый редактор. Ниже приведен пример такого файла:
WindowsRegistryEditorVersion5.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:\\ProgramFiles\\MyProgram»
@=«C:\\ProgramFiles\\MyProgram\\Database»
Такой REG-файл можно использовать для внесения инфор­мации в реестр с помощью функции LoadKey или путем запу­ска этого файла из программы Windows Explorer.
В первой строке файла содержится информация, которая указывает на версию программы REGEDIT, с использованием которой был создан данный файл. При создании собственного REG-файла с помощью текстового редактора необходимо по­местить это ключевое слово в начале файла. Структура файла следующая. После первой строки размещается имя ключа в ква­дратных скобках, затем можно разместить одну или несколь­ко пар «имя/значение». Знак @ обозначает значение ключа по умолчанию. Имена и значения должны быть заключены в ка­вычки за исключением символа «?», который соответствует зна­чению по умолчанию. Вместо символа «\» следует использовать «\\» (два подряд идущих символа). В конце файла следует до­бавить пустую строку, иначе REGEDIT может проигнорировать последнюю строку файла.
Существует и другой способ модификации реестра – это ис­пользование INF-файлов. Обычно эти файлы применяются для установки драйверов устройств, но с помощью INF-файлов так­же можно управлять добавлением и удалением записей реестра.
87
ЛЕКЦИЯ 8.
Командная строка в ОС Windows.
Основные команды и параметры
Консоль командной строки присутствует во всех версиях ОС Windows. Ранние версии ОС поддерживали режим MS-DOS напрямую, что позволяло выполнять простые команды прямо из консоли. Представители же семейства NT, такие как Win­dows 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]