Функции C# для работы с системным Реестром



ГОУ ВПО Донецкий национальный технический университет

кафедра компьютерной инженерии

 

Чередникова Ольга Юрьевна

 

 

Лабораторный практикум по дисциплине

Системное программное обеспечение

 

 

часть вторая

 

 

Донецк, 2016

Оглавление

Лабораторная работа № 8 Реестр. 4

Теоретические сведения. 4

Некоторые действия, реализуемые изменением реестра: 5

Твики реестра Windows 5

Функции C# для работы с системным Реестром. 8

Варианты заданий. 10

Лабораторная работа № 9 Процессы. 12

Создание процесса. 12

Способы взаимодействия процессов. 12

FileMapping - объект файлового отображения. 12

Каналы передачи данных Pipe. 14

Почтовые ящики (MailSlot) 20

Варианты заданий. 24

Лабораторная работа № 10 Потоки. 26

Создание и запуск потоков. 26

Синхронизация потоков. 28

lock. 29

Мониторы. 30

Класс AutoResetEvent 33

ManualResetEvent 35

Мьютексы. 35

Семафоры (Semaphore) 37

Волокна. 39

Варианты заданий. 44

Лабораторная работа № 11 WMI 45

Теоретические сведения. 45

Работа с WMI в сценариях WSH. 46

Варианты заданий. 49

Лабораторная работа № 12 Защищенный режим. 51

Теоретические сведения. 51

Программа для включения защищённого режима и возврата в режим реальных адресов. 54

Требования к выполнению лабораторной работы.. 60

Приложение 1. Некоторые классы репозитория CIM. 62

Приложение 2. Свойства классов WMI 64

Список рекомендуемой литературы.. 75

 


Лабораторная работа № 8 Реестр

Системный Реестр WINDOWS NT

Цель работы: изучить структуру системного Реестра и основные функции работы с системным Реестром.

Теоретические сведения

Системный Реестр в WINDOWS NT является иерархической структурой, состоящей из разделов (key) и пар параметров. Эта структура используется как база данных, централизованно хранящая информацию о пользователях, приложениях, операционной системе и о конфигурации компьютера. Разделы HKEY - это средства доступа к разделам Реестра самого верхнего уровня. Они определяются в API Реестра и являются точкой входа для разработчиков к остальному дереву Реестра. Названия разделов, их аббревиатур, а также краткое описание приведены в табл. 8.1

Таблица 8.1 – Описание корневых разделов системного реестра Windows

Имя корневого раздела Аббревиатура Описание
HKEY_USERS HKU содержатся подразделы, в которых хранится информация обо всех учетных записях на текущем компьютере
HKEY_CURRENT_USER HKCU содержит данные, которые ссылаются на профиль пользователя, который вошел в систему на данный момент
HK_LOCAL_MACHINE HKLM содержит конфигурационные параметры системного уровня
HKEY_CLASSES_ROOT HKCR расположены конфигурационные параметры для приложений и файлов, а также хранится регистрационная информация COM-объектов
HKEY_CURRENT_CONFIG HKCC включены информационные сведения об используемом профиле оборудования
HKEY_PERFORMANCE_DATA HKPD хранит некоторые сведения о производительности системы

Основная составная часть реестра – это ключи (или параметры), в которых и хранится вся информация. Каждый параметр реестра Windows отвечает за определенное свойство системы. Ключи с данными о смежных настройках компьютера объединены в разделы, которые, в свою очередь, являются подразделами более крупных разделов и т.д. Пара «параметр - значение» состоит из трех частей: имени параметра, значения параметра и типа данных, т.е. типа значения. Основные три типа данных: двойное слово (DWORD - тип REG_DWORD), строка (STRING - тип REG_SZ) и двоичное значение (BINARY - тип REG_BINARY).

Некоторые действия, реализуемые изменением реестра:

Ø Узел HkLM\ SYSTEM\ CurrentControlSet\ Control…

Отключение коротких имен 8.3 в NTFS:

…\ FileSystem\NtfsDisable8dot3NameCreation :=1

Изменение установленных по умолчанию переменных окружения:

... \ SessionManager\ Environment

Очистка файла подкачки Pagefile.sys.

... \ SessionManager\ MemoryManagement\ ClearPageFileAtShutdown :=1

Ø Узел HkLM\ SOFTWARE\ Microsoft\ WindowsNT\ CurrentVersion\ WinLogon ...

Запрет перезагрузки и выключения компьютера.

... \ ShutdownWithoutLogon :=1

Уничтожение информации о последнем пользователе:

... \ DontDisplayLastUserName :=1

Потенциальные места расположения троянских программ.

... \ System - запуск от имени системы

... \ Userinit - запуск от имени пользователя.

HkLM\ Software\ Microsoft\ Windows\ CurrentVersion\ Run\

Снятие,установка Пароля Экранных Заставок, в ключе:

Ø HkU\ Default\ ControlPanel\ Desktop\ ScreenSaveIsSecure :=1

Переименование-Удаление Корзины

Ø HkCR\ CLSID\ {645FF040-5... }\ ShellFolder\ Attributes :=70010020

Изменение настроек создания ярлыков (приставка «Ярлык для» к названию ярлыков больше добавляться не будет)

Ø HkCU\Software\Microsoft\Windows\CurrentVersion\Explorer\link=00000000

Изменить задержку появления меню

Ø HkCU \Control Panel\Desktop\MenuShowDelay.

Изменение языка по умолчанию в окне входа в систему

Ø HKEY_USERS\.DEFAULT\Keyboard Layout\Preload

Он имеет 2 строковых параметра - "1" и "2". Если значения равны:

1=00000409

2=00000419

то раскладка в окне входа в систему станет английской.

Если значения параметрам присвоить наоборот ("1"=00000419, "2"= 00000409) - то раскладка станет русской.

Отключение всплывающих подсказок для элементов рабочего стола

Ø HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\

ShowInfoTip:= 0

Отключение автоматического обновления

Ø HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\AUOptions := 1

Твики реестра Windows

Твики реестра Windows (англ. tweaks - настройки) - это настройки программного обеспечения и операционной системы, хранящиеся в системном реестре. Твики реестра реализуются при помощи REG-файлов - файлов, которые при их запуске автоматически вносят необходимые изменения в системный реестр Windows. Результат такой же, как и при ручном редактировании реестра через редактор. Нужные REG-файлы можно создавать самостоятельно или же использовать уже готовые, созданные другими пользователями. При этом, REG-файл может изменять как один параметр реестра, так и целые их группы.

По сути, REG-файл – это самый обычный текстовый файл с .reg.

Теперь если сделать двойной щелчок мышки по сохраненному файлу, компьютер «спросит», действительно ли нужно добавить информацию из него в реестр. Обратите внимание, что данные эти должны иметь строго определенную структуру. В противном случае, REG-файл работать не будет.

Структура REG-файла

В первой строке файла указывается информация о том, для редактирования какой версии Windows он предназначается. Если это Windows 98 или Windows NT, то в первой строке вписываем «REGEDIT4». Для более поздних версий Windows (2000, XP, 7 и др.) – «Windows Registry Editor Version 5.00» (без кавычек, точно как указано - со всеми пробелами, большими буквами и т.д.). Ничего больше в этой строке быть не должно.

Вторая строка обязательно должна быть пустой.

В третьей строке в квадратных скобках […] прописывается ветка (раздел) реестра, в которой находятся изменяемые параметры.

В четвертой и последующих строках прописываются изменяемые ключи, которые находятся в указанном разделе, а также проводимые с ними действия (каждый изменяемый параметр в отдельной строке) - табл.8.2.

Таблица 8.2. Действия над ключами реестра

Двоичные параметры

Действие Общий вид Пояснения
Создание "Название"=hex:00,00,00 Будет создан двоичный параметр с названием «Название» и значением 00 00 00. Слово hex указывает на то, что будет создан именно двоичный параметр. В REG-файлах значение для двоичных параметров указывается шестнадцатеричными числами, разделенными запятыми. Слово hex пишется маленькими буквами, двоеточие обязательно, без пробелов.
Изменение "Название"=hex:00,00,00 Существующему двоичному параметру с названием «Название» будет задано значение 00 00 00 (см. комментарий в предыдущем пункте)
Удаление "Название"=- Существующий двоичный параметр с названием «Название» будет удален из реестра.

Параметры DWORD

Создание "Название"=dword:00000000 Будет создан параметр DWORD с названием «Название» и значением 00000000. Большинство параметров DWORD имеют значение либо 1, либо 0. В REG-файлах значение для DWORD указываются в шестнадцатеричном формате. Поэтому 0 будет иметь вид 00000000, а 1 – 00000001. Слово dword пишется маленькими буквами, двоеточие обязательно, без пробелов.
Изменение "Название"=dword:00000000 Существующему параметру DWORD с названием «Название» будет задано значение 00000000 (см. комментарий к предыдущему пункту)
Удаление "Название"=- Существующий DWORD параметр с названием «Название» будет удален из реестра.

 

Строковые параметры

Создание "Название"="Значение" Будет создан строковый параметр с названием «Название» и значением «Значение». Обратите внимание: кавычки обязательны до и после знака «=». Без пробелов.
Изменение "Название"="Значение" Существующему строковому параметру с названием «Название» будет задано новое значение «Значение».
Удаление "Название"=- Существующий строковый параметр с названием «Название» будет удален из реестра.

Об остальных видах параметров реестра говорить не будем, поскольку пользователями они редактируются редко.

Последняя строка REG-файла обязательно должна быть пустой.

Рассмотрим пример:

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore] "1"=dword:00000000 "11"="2" "111"=hex:00,00,00 "1111"=-

Этот REG-файл вразделереестра «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore» создаст:

• Параметр DWORD с названием «1» и значением «0» (если в разделе уже существует параметр DWORD с названием «1», то его значение станет «0»)

• Строковый параметр с названием «11» и значением «2» (если в разделе уже существует строковый параметр с названием «11», то его значение станет «2»)

• Двоичный параметр с названием «111» и значением 00 00 00 (если в разделе уже существует двоичный параметр с названием «111», то его значение станет «00 00 00»)

• Удалит из раздела параметр (какого бы вида он ни был) с названием «1111».

А что же делать, если кроме этого нужно еще изменить параметры, находящиеся в другом разделе реестра? Все очень просто. Оставляем одну пустую строку после последнего параметра, после чего в квадратных скобках […] указываем новый раздел, а в последующих строках - параметры, которые в нем нужно изменить.

Добавим к нашему примеру еще несколько строк:

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore] "1"=dword:00000000 "11"="2" "111"=hex:00,00,00 "1111"=- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] "2"="ххх" "22"=-

ТакойREG-файл, кромеизложенныхвышедействий, вразделе «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion» создастстроковыйпараметрсназванием «2» изначением «ХХХ» иудалитпараметрсназванием «22».

Последняя строка в таком REG-файле тоже обязательно должна быть пустой.

Функции C# для работы с системным Реестром

Для управления реестром в пространстве имен Microsoft.Win32 имеются два класса: Registry и RegistryKey.

Класс Registry позволяет получить доступ к ключам верхнего уровня реестра. А класс RegistryKey представляет отдельный ключ реестра.

При использовании этих классов необходимо учитывать древовидную иерархическую структуру реестра. Так получение ключа верхнего уровня HKEY_LOCAL_MACHINE, который содержит информацию об установленном на локальной машине программном обеспечении, происходит следующим образом:

    RegistryKey localMachineKey = Registry.LocalMachine;

Класс Registry содержит еще ряд статических свойств, каждое из которых представляет соответствующий ключ верхнего уровня:

•   Registry.ClassesRoot

•   Registry.CurrentConfig

•   Registry.CurrentUser

•   Registry.DynData

•   Registry.Users

•   Registry.PerformanceData

Для управления ключами в реестре класс RegistryKey определяет ряд свойств и методов. Основные из них:

•   Name: возвращает имя ключа реестра

•   Close(): закрывает ключ

•   CreateSubKey(): создает вложенный ключ, если он не существует

•   DeleteSubKey(): удаляет вложенный ключ

•   DeleteValue(): удаляет значение ключа

•   GetSubKeyNames(): возвращает коллекцию имен вложенных ключей

•   GetValue(): возвращает значение ключа

•   OpenSubKey(): открывает вложенный ключ

•   SetValue(): устанавливает значение ключа

Создадим свой ключ в реестре:

RegistryKey currentUserKey = Registry.CurrentUser;

RegistryKey helloKey= currentUserKey.CreateSubKey("HelloKey");

helloKey.SetValue("login", "admin");

helloKey.SetValue("password", "12345");

helloKey.Close();

 

Создадим в ранее созданном ключе вложенный ключ:

    RegistryKey currentUserKey = Registry.CurrentUser;

RegistryKey helloKey= currentUserKey.OpenSubKey("HelloKey", true);

RegistryKey subHelloKey = helloKey.CreateSubKey("SubHelloKey");

subHelloKey.SetValue("val", "23");

subHelloKey.Close();

helloKey.Close();

Значение true в вызове OpenSubKey("HelloKey", true); позволяет открывать ключ с возможностью записи в него.

Считаем сохраненные в реестре значения:

    RegistryKey currentUserKey = Registry.CurrentUser;

RegistryKey helloKey= currentUserKey.OpenSubKey("HelloKey");

 

string login = helloKey.GetValue("login").ToString();

string password = helloKey.GetValue("password").ToString();

helloKey.Close();

 

И в конце удалим значения из ключа и сам ключ из реестра:

RegistryKey currentUserKey = Registry.CurrentUser;

RegistryKey helloKey= currentUserKey.OpenSubKey("HelloKey", true);

helloKey.DeleteSubKey("SubHelloKey");// удаляемвложенныйключ

helloKey.DeleteValue("login");// удаляемзначениеизключа

helloKey.Close();

currentUserKey.DeleteSubKey("HelloKey");// удаляемсамключ

 


Дата добавления: 2018-04-05; просмотров: 1377; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!