ОС. 6B06102_Операционные системы_МУ_лаб. Исследование диспетчеризации процессов и потоков
Скачать 0.5 Mb.
|
Компонент ключа Обязательный Описание Имя Да Строка, используемая для доступа к ключу. Должна быть уникальной среди других ключей того же уровня иерархии Класс Нет Имя класса объекта. Предназначен для использования в коде методов класса, экземпляры которого хранятся в реестре. Приложениями обычно не используется Дескрипт ор защиты Нет Ключи содержат стандартные дескрипторы зашиты Windows NT, допускают управление доступом и могут быть подвергнуты аудиту Время последней записи Нет Время, когда ключ был последний раз модифицирован. Любое изменение элемента считается изменением ею родительского ключа Элемент( ы) Нет Информация, хранящаяся в ключе: имя для идентификации значения, тип для определения типа данных и сами данные соответствующей длины и формата Ключ HKEY_CLASSES_ROOT содержит те же данные, что и файл REG.DAT в Windows 3.1 - сведения о встраивании и связывании объектов (Object Linking and Embedding, OLE) и ассоциации файлов с приложениями, которые позволяют Windows запускать приложение, соответствующее выбранному файлу, то есть в разделе HKEY_CLASSES_ROOT содержатся ключи двух главных типов. Первый тип ключей хранит информацию о расширении файла. Таким способом хранятся все трехбуквенные расширения имен файлов, например MP3 или JPG, которые когда-либо использовались. Windows 98 все еще использует их для определения типа файла. (Так как Windows 98 поддерживает длинные имена файлов, то, используя этот раздел, можно создать ассоциацию для файлов с расширением более чем три символа.) Реестр также использует расширения для того, чтобы связать тип файла с определенным действием. Например, хотя пользователь не может ничего сделать с файлом, имя которого имеет расширение DLL, это расширение все равно хранится в реестре, т.к. Windows 98 нужно знать о том, что файл с расширением DLL является исполняемым файлом. Второй тип ключей представляет собой собственно ассоциацию. Расширение имени файла обычно указывает на файл данных определенного приложения. В разделе, описывающем ассоциацию, находятся ключи, которые используются в контекстном меню Проводника (Explorer). Контекстное меню вызывается нажатием правой кнопки мыши. Ассоциация также содержит информацию о том, какой значок выводить для данного типа файла. HKEY_LOCAL_MACHINE этот ключ содержит спецификации рабочей станции, драйверов и другие системные настройки, включая информацию о типах установленного оборудования, настройках портов, конфигурации программного обеспечения и т. п. Эта информация специфична для компьютера, а не для пользователя. Раздел HKEY_LOCAL_MACHINE - для очень подробной информации об аппаратном обеспечении. Например, он содержит всю информацию, необходимую для Plug and Play, а также предоставляет полный список драйверов устройств и их уровни ревизии (revision level) и даже может содержать информацию о ревизии самого аппаратного обеспечения. Кроме того в этом разделе имеется некоторая информация о программном обеспечении. Например, 32-разрядное приложение будет хранить таблицу установок и форматов (Setup and Format Table-STF) именно здесь. Эта информация используется приложением во время установки. Некоторые приложения используют ее во время изменений параметров их установки. Такие приложения, как Word, хранят всю информацию о своей установке в таблицах STF. В этом разделе содержится только информация глобального характера. HKEY_CURRENT_CONFIG. Этот ключ содержит информацию о текущей конфигурации аппаратуры компьютера и используется в основном на компьютерах с несколькими аппаратными конфигурациями, например при подключении портативного компьютера к стыковочной станции и отключении от нее. Информация, содержащаяся в этом ключе, копируется из ключа HKEY_LOCAL_MACHINE. Он содержит два главных раздела: Display и System. По существу эти разделы используются программным интерфейсом GDI API для конфигурации монитора и принтера. Раздел Display имеет два подраздела: Fonts и Setting. Fonts определяет шрифты, которые Windows 98 использует для вывода на экран. Имеются растровые шрифты (не True Type), которые представляют собой битовые изображения символов. Setting содержит текущее разрешение экрана и количество битов на пиксел. Количество битов на пиксел определяет доступное количество цветов. Например, 4 бита на пиксел обеспечивают 16 цветов, 8 битов на пиксел обеспечивают 256 цветов. Три шрифта, перечисленных в этом разделе, являются шрифтами по умолчанию, которые система использует для отображения значков и меню приложений. Эти настройки можно изменить в диалоговом окне свойств экрана. Раздел System производит впечатление чего-то запутанного. Однако только один подраздел этого раздела имеет смысл для пользователя - Printers. Раздел Printers содержит список принтеров, подсоединенных к системе. Этот список не включает принтеры, которые используются по сети. HKEY_USERS. Это ключ содержит информацию обо всех пользователях данной рабочей станции. Здесь хранятся данные о каждом пользователе, а также типовые настройки, служащие шаблоном для новььх ключей, создаваемых пользователем. Типовые настройки включают различные значения по умолчанию для программ, схем событий, конфигураций рабочего стола и т. п. Необходимости в изменении информации этого раздела никогда не возникает, но его можно использовать в справочных целях. Причина, по которой нужно следовать этим указаниям, проста: ни одно изменение не войдет в силу до тех пор, пока пользователь не зарегистрируется в системе следующий раз. Кроме того, изменение настроек для текущего пользователя является пустой тратой времени, потому что Windows 98 заменяет все данные в соответствующем разделе данными, которые содержатся в разделе HKEY_CURRENT_USER, во время завершения сеанса или при завершении работы системы. Существует еще одна проблема, связанная с использованием этого раздела в качестве единственного источника информации. На самом деле Windows 98 поддерживает несколько копий реестра в многопользовательской среде, в некоторых случаях отдельную копию для каждого пользователя. По этой причине никогда нельзя быть уверенным, где именно можно найти информацию об определенном пользователе. Windows 98 отслеживает эту информацию; необходимость поиска такой информации это головная боль для администратора. Сверх того, Microsoft поставляет утилиту, которая помогает администратору сети поддерживать различные реестры. Редактор системных правил (Policy Editor) позволяет упростить для администратора сети управление пользовательскими настройками, при этом является удобным средством доступа к нужным параметрам системы, которые распределены по различным разделам реестра. Когда пользователь регистрируется в системе, Windows 98 копирует информацию из его профиля в раздел реестра HKEY_CURRENT_USER. Когда пользователь выходит из системы или завершает работу, Windows 98 заменяет информацию в разделе, соответствующему данному пользователю, информацией из раздела HKEY_CURRENT_USER. HKEY_CURRENT_USER Этот ключ содержит настройки системы и программ, относящиеся к текущему пользователю. Он создается при регистрации пользователя в системе на основе информации из соответствующего раздела ключа HKEY_USERS. Именно здесь хранятся сведения о том, как данный пользователь сконфигурировал рабочую станцию - например, данные том, что каждый старт системы должен сопровож- даться звуковым эффектом. Прочая информация может включать цветовые схемы, ярлыки, состояние рабочего стола и т. п. Информация в этом разделе является динамической; информация в других разделах, которая относится к пользовательским настройкам, - статическая. HKEY_DYN_DATA. Этот ключ содержит динамическую информацию о состоянии различных устройств, причем она создается заново при каждом старте системы. Ключ HKEY_DYN_DATA используется как часть системы измерения производительности и для конфигурации устройств Plug-and-Play. Информация, содержащаяся здесь, меняется при добавлении новых устройств и удалении существующих. Для каждого устройства это данные о соответствующем аппаратном ключе, известных проблемах и текущем состоянии устройства. Ключ HKEY_DYN_DATA также содержит сведения о состоянии системы, формируемые с помощью утилиты System Monitor. Это ключ не входит в состав файлов реестра и всегда создается динамически. Раздел HKEY_DYN_DATA содержит два подраздела: Config Manager и PerfStats. Просмотреть статус ключа Config Manager можно при помощи вкладки Устройства (Device Manager) диалогового окна свойств системы. Значения ключей из раздела PerfStats отображаются в интерфейсе утилиты System Monitor. Редактор реестра Редактор реестра RegEdit - основной инструмент пользователя для манипуляции с реестром, предоставляемый Microsoft. Для запуска редактора реестра используется меню Пуск-> Выполнить. В окне имени файла необходимо ввести regedit и нажать ОК. Редактор реестра дает возможность просматривать содержимое реестра, создавать и удалять подразделы и пары параметр- значение, выполнять экспорт-импорт всего реестра или его части. НИКОГДА НЕ УДАЛЯЙТЕ ПОДРАЗДЕЛЫ и ПАРЫ ПАРАМЕТР_ЗНАЧЕНИЕ, которые ВЫ не создавали! Редактор реестра поддерживает только три типа данных (перечисленные выше) из 9. Для выполнения операций с данными других типов необходимо использовать функции Win32 API. Функции Win32 для работы с реестром Работать с приложениями удобнее, если при каждом запуске оно сохраняет информацию о действиях и препочтениях пользователя. Эти данные можно применять и далее – например, сохранить имя последней базы данных, открытой пользователем, и указать его в качестве имени по умолчанию, когда пользователь обратится к базе данных в следующий раз. Для сохранения параметров приложения в реестре применяются операторы Visual Basic SaveSetting и GetSetting и соответствующие функции API Windows. Они имеют следующий синтаксис: SaveSetting (приложение, раздел, ключ, параметр) GetSetting (приложение, раздел, ключ, [по умолчанию]) В приведенном ниже коде с помощью оператора SaveSetting создаются элементы реестра для приложения, заданного в аргументе приложение, а затем применяется оператор GetSetting для получения значений параметров. Поскольку задано значение по умолчанию, возврат значения гарантирован. * Поместить настройки в реестр* SaveSetting ―MyApp‖, ―Startup‖, ―Top‖,75 SaveSetting ―MyApp‖, ―Startup‖, ―Left‖,50 Использовать настройки из реестра для отображения текущей формы Me.Left = GetSetting(appname : = ―MyApp‖. _ section : = ―Startup‖, key : = ―Left‖, default : = ―0‖) Me.Top = GetSetting(appname : = ―MyApp‖. _ section : = ―Top‖, key : = ―Left‖, default : = ―0‖) 1. Открытие и закрытие родительского раздела. Перед началом выполнения любых операций с разделом его необходимо открыть ( как и при работе с любой базой данных). Для открытия раздела используется функция RegOpenKeyEx ( HKEY_LOCAL_MACHINE, // имя корневого раздела 'SOFTWARE\Borland', // имя открываемого подраздела 0, // зарезервированное значение KEY_ALL_ACCESS, // вид доступа к разделу - полный доступ hkkey ) // возвращаемое значение - Handle раздела - типа HKEY. При успешном открытии возвращается ERROR_SUCCESS, т.е. 0. Если подраздел не существует, возвращается 2. После окончания работы с подразделом его необходимо закрыть, используя функцию RegCloseKey (hkkey); 2. Создание подразделов. Для создания подраздела в существующем разделе используется функция RegCreateKeyEx, с помощью которой можно открыть существующий раздел, или создать новый подраздел. Пример вызова функции RegCreateKeyEx ( HKEY_LOCAL_MACHINE, // имя корневого раздела 'SOFTWARE\myrazd', // имя создаваемого подраздела 0, // резерв, всегда 0 '', // имя класса или типа объекта раздела - пустая строка REG_OPTION_NON_VOLATILE, // постоянный раздел KEY_ALL_ACCESS, // вид доступа к разделу nil, // атрибут безопасности hkkey, // описатель раздела, тип HKEY @result ) : integer - код ошибки // Result - типа DWORD. Параметр result типа DWORD принимает значения REG_CREATED_NEW_KEY или REG_OPENED_EXISTING_KEY. 3. Установка значения параметра. Функция RegSetValueEx создает в открытом или созданном разделе пару параметр- значение. Пример вызова функции RegSetValueEx ( описатель созданного или открытого раздела, имя пары параметр-значение, 0, // резерв - всегда 0 REG_SZ, // тип значения - строка с 0 в конце Strd, // переменная типа Pchar, которой присвоено необходимое значение Length (strd) // длина значения ) ; 4. Получение значения параметра Для чтения значения параметра используется функция RegQueryValueEx. Необходимо описать переменные: dwType : DWORD - тип возвращаемого значения buf : Array [1..n] of char -массив для получения значения строкового параметра len : DWORD - длина буфера и присвоить переменным значения dwType := REG_SZ; len:= N; Вызов функции для чтения значения параметра Error := RegQueryValueEx ( hkkey, // handle открытого раздела имя параметра, // имя должно быть записано в апострофах nil, // зарезервированное значение @dwType, // адрес типа возвращаемого значения @buf, // адрес буфера @len ); if Error = ERROR_SUCCESS then // если нет ошибки - получить значение параметра for k:=1 to len-1 do str := str + buf [ k ]; 5. Удаление раздела и его значений - функция RegDeleteKey. 6. Получение информации из открытого раздела - RegQueryInfoKey (). Функция возвращает: - количество подразделов; - длину самого длинного имени подраздела; - количество пар; - длину самого длинного имени параметра; - длину самого длинного значения; 7. Просмотр пар параметр- значение - функция RegEnumValue (). Среди прочего, возвращает информацию о типе значения данной пары. 8. Уведомление приложения об изменениях в разделе - RegNotifyChangeKeyValue. Она может сгенерировать событие при изменении имен раздела или создании и удалении раздела (для раздела или подраздела). Пример использования данной функции приведен ниже procedure TForm1.Button1Click(Sender: TObject); var ev : Thandle; err : dword; hkkey : hkey; result : DWORD; begin ev:=CreateEvent(nil,true,false,'name'); err:= RegCreateKeyEx ( HKEY_LOCAL_MACHINE, // 'SOFTWARE', // 0, '', REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, nil, hkkey, @result ); RegNotifyChangeKeyValue (hkkey,True, REG_NOTIFY_CHANGE_NAME, ev,true); waitforSingleObject( ev, infinite); ShowMessage (' Реестр изменен '); end; Использование компонента Registry Пример1. Приведенный фрагмент по введенному в окне редактирования пути (он может быть пустым) к разделу реестра (расположенного в HKEY_LOCAL_MACHINE\SOFTWARE) дает возможность получить список его подразделов, а для подраздела, имеющего список пар параметр-значение - список имен параметров. Не забудьте добавить registry в uses. procedure TForm1.Button1Click(Sender: TObject); var reg : Tregistry; res : boolean; strs : TstringList; i : integer; begin ListBox1.Clear; ListBox2.Clear; reg:=Tregistry.Create; strs:=TstringList.Create; reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SOFTWARE\'+Edit1.Text,False); if res then label1.caption:='ok'; // получение списка имен ключей (подразделов) раздела, путь которого указан строкой // SOFTWARE\ и строкой, введенной в окне редактирования Edit1 reg.GetKeyNames(strs); label2.Caption:=inttostr(strs.count); for i:=1 to strs.count-1 do listbox1.Items.add(strs.strings[i]); // получить имена параметров данного раздела reg.GetValueNames(strs); label2.Caption:=inttostr(strs.count); for i:=1 to strs.count do listbox2.Items.add(strs.strings[i-1]); reg.CloseKey; end; Пример 2. Поиск в разделе реестра заданного имени подраздела. Const RtK : array[1..6] of HKEY = (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG, HKEY_DYN_DATA); RKS: array[1..6] of String = ('HKEY_CLASSES_ROOT', 'HKEY_CURRENT_USER', 'HKEY_LOCAL_MACHINE', 'HKEY_USERS', 'HKEY_CURRENT_CONFIG', 'HKEY_DYN_DATA'); function SearchKey(MainKey:word; // номер одного из 6 разделов реестра SubKey:String; // подраздел, с которого начинается поиск KeyF:String // имя подраздела, которое требуется найти ):string; var I:dword; value:TRegKeyInfo; Strs:TStringList; path : string; begin Strs:=TStringList.create; reg.RootKey:= Rtk[MainKey] ; // задаем подраздел, в котором необходимо искать reg.OpenKey(SubKey,false); if reg.GetKeyInfo(value) then Begin // при отсутствии подраздела – выход if value.NumSubKeys=0 then exit; reestr.GetKeyNames(Strs); reestr.CloseKey; For I := 1 to Value.NumSubKeys do Begin // получение пути к разделам if subkey='\' then path:='\'+Strs.Strings[i-1] else path:=subkey+'\'+Strs.Strings[i-1]; if Strs.Strings[i-1]=KeyF then Listbox1.Items.add(Rks[MainKey]+Path); // запись результата // вызов SearchKey ( ); - фактические параметры указать самостоятельно, исходя из логики процедуры поиска End; reg.CloseKey; end; end; Лабораторная работа рассчитана на 6 часов работы и включает в себя изучение кратких теоретических сведений, выполнение индивидуального задания, оформление отчета и сдачу работы. Содержание отчета: 1. Название, цель и задание к лабораторной работе. 2. Листинг программы и распечатки результатов выполнения задания. Задание. 1. Написать приложение для создания в разделе HKEY_LOCAL_MACHINE\SOFTWARE подраздела, имя которого задается путем ввода с клавиатуры и записи в созданный раздел пары параметр-значение. Имя параметра и значение должны вводиться с клавиатуры. 2. Добавить возможность редактирования с помощью разработанного приложения значений пар параметр-значение_строкового типа и проверить правильность выполнения редактирования на созданной в п.1 паре. 3. Разработать приложение для поиска в заданном разделе реестра параметра по его имени. Результат поиска – список путей к подразделам реестра, в которых хранится параметр с заданным именем. 4. Создать приложение, использующее при запуске индивидуальные настройки собственных объектов, сохраняющихся при закрытии приложения в системном реестре |