Функции 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!