Методические указания к лабораторным работам по курсу системное программное обеспечение



страница1/4
Дата28.11.2016
Размер1.5 Mb.
Просмотров375
Скачиваний2
ТипМетодические указания
  1   2   3   4

Донецкий национальный технический университет

Методические указания к лабораторным работам по курсу

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Составитель:

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

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

Донецк, 2015

Содержание

Лабораторная работа № 6

Лабораторная работа № 7

Лабораторная работа № 8

Лабораторная работа № 9

Лабораторная работа № 10


Лабораторная работа № 6


Исследование файловой системы NTFS.

Цель работы: изучить структуру файловой системы NTFS и получить навыки программного доступа к элементам этой файловой системы с помощью функций WIN API.

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

В NTFS все пространство разделено на кластера. Кластером называется группа смежных секторов, количество которых равно степени 2 (то есть 1, 2, 4, 8, 16). Каждому кластеру назначается адрес, начиная с 0. Чтобы преобразовать адрес кластера в адрес сектора, достаточно умножить его на количество секторов в кластере:

СЕКТОР =КЛАСТЕР *секторов_в_кластере.

Для обозначения кластеров используются два типа номеров: LCN и VCN. При помощи первого типа, LCN (Logical Cluster Number – логический номер кластера), нумеруются все кластеры на диске, от первого до последнего. Номера VCN (Virtual Cluster Number – виртуальный номер кластера) обозначают порядковый номер кластера внутри файла.

«Сердцем» NTFS является главная файловая таблица MFT (Master File Table), содержащая информацию обо всех файлах и каталогах. Каждый файл и каталог представлен как минимум одной записью таблицы, причем записи сами по себе очень просты. Их размер составляет 1 Кбайт, но только первые 42 байта имеют определенное предназначение. В остальных байтах хранятся атрибуты — небольшие структуры данных, выполняющие строго специализированную функцию. Например, один атрибут используется для хранения имени файла, а другой — для хранения его содержимого. Каждой записи на основании ее местонахождения в таблице присваивается адрес, начиная с 0. MFT, как и все структуры NTFS, представляет собой таблицу. Ситуация несколько усложняется тем, что MFT содержит запись для представления себя самой. Первая запись таблицы называется $MFT и задает местонахождение MFT на диске. Фактически это единственное место, в котором указывается местонахождение MFT; следовательно, эту запись необходимо обработать для определения структуры и размера MFT. Начальный адрес MFT задается в загрузочном секторе, который всегда располагается в первом секторе файловой системы.

Файловые записи (дескрипторы)

Файловая запись состоит из заголовка (Header) и набора атрибутов (Attribute). В заголовке содержится служебная информация о файловой записи, например, её тип и размер. Все данные, относящиеся непосредственно к файлу, хранятся в виде атрибутов. Названия атрибутов, так же как и системных файлов, начинаются с «$». Например, отдельными атрибутами являются имя файла ($FILE_NAME), информация о его свойствах ($STANDARD_INFORMATION), данные файла ($DATA). На диске файловая запись всегда расположена в начале сектора. Чаще всего записи MFT занимают 2 или 4 сектора, хотя встречаются записи и другого размера.

В NTFS файл может целиком размещаться в записи таблицы MFT, если это позволяет сделать его размер. В том же случае, когда размер файла больше размера записи MFT, в запись помещаются только некоторые атрибуты файла, а остальная часть файла размещается в отдельном отрезке тома (или нескольких отрезках). Часть файла, размещаемая в записи MFT, называется резидентной частью (резидентным атрибутом), а остальные части — нерезидентными атрибутами. Адресная информация об отрезках, содержащих нерезидентные части файла, размещается в атрибутах резидентной части.

Некоторые системные файлы являются полностью резидентными, а некоторые имеют и нерезидентные части, которые располагаются после MFT. Если значение атрибута хранится непосредственно в MFT, время, необходимое NTFS для доступа к нему, значительно сокращается.



http://ok-t.ru/life-prog/baza1/100122348178.files/image008.png

Структура заголовка файловой записи показана в табл.13.1:



В первом поле каждой записи MFT хранится сигнатура; у стандартных записей это ASCII-строка «FILE». Если в записи обнаружена ошибка, в качестве сигнатуры может использоваться строка «BAAD». В следующих двух полях содержатся маркеры, а массив замененных байтов обычно хранится после байта 42. Смещения задаются по отношению к началу записи.

Первый атрибут файла находится по смещению, заданному относительно начала файла. За первым атрибутом следуют остальные; чтобы найти их, следует сместиться вперед на величину, указанную в поле размера в заголовке атрибута. За последним атрибутом находится признак конца файла Oxffffffff. Если файлу требуется более одной записи MFT, то в дополнительные записи включается базовый адрес основной записи.

Поле флагов указывает, используется ли запись и представляет ли она каталог. Бит 0x01 устанавливается в том случае, если запись используется, а бит 0x02 —если запись представляет каталог. Если атрибуты не помещаются в одной записи, для файла создаются несколько записей MFT. В этом случае первая запись называется базовой записью MFT, а ее адрес сохраняется в одном из фиксированных полей всех остальных записей.



Заголовки атрибутов

У резидентных и нерезидентных атрибутов структуры данных слегка различаются, потому что в нерезидентных атрибутах требуется дополнительно хранить информацию о сериях. Первые 16 байт атрибутов обоих типов совпадают. Содержащиеся в них поля перечислены в табл. 13.2. Заголовок содержит базовую информацию об атрибуте, включая тип, размер и местонахождение имени. Размер используется для поиска следующего атрибута в записи MFT; за последним атрибутом следует специальная последовательность Oxffff ffff. Флаг нерезидентного атрибута устанавливается равным 1, если атрибут является нерезидентным. Поле флагов указывает, является ли атрибут сжатым (0x00001), зашифрованным (0x4000) или разреженным (0x8000). Идентификатор атрибута представляет собой число, уникальное для данного атрибута в данной записи MFT. Если запись содержит несколько однотипных атрибутов, они различаются по значению идентификатора.



Смещение имени задается относительно начала атрибута. Некоторым атрибутам назначается имя, хранящееся в кодировке Unicode UTF-16 в заголовке атрибута. Имена используются в основном с атрибутами данных для идентификации второго или третьего потока данных в файле. Поля резидентного атрибута перечислены в табл. 13.3.



Поля структуры данных нерезидентных атрибутов приведены в табл. 13.4.





Стандартные типы атрибутов

Каждый тип атрибута представляется неким числом, причем Microsoft сортирует атрибуты в записи по этому числу. Стандартным атрибутам присваивается значение по умолчанию, но это значение можно переопределить при помощи файла метаданных файловой системы $AttrDef. Кроме числового идентификатора каждый тип атрибута обладает именем, которое состоит только из прописных букв и начинается со знака «$». В табл. 11.2 перечислены некоторые стандартные типы атрибутов и соответствующие им идентификаторы. Учтите, что не все типы атрибутов и идентификаторы существуют для каждого файла.





Почти все выделенные записи MFT содержат атрибуты типов $FILE_NAME и $STANDARD_INFORMATION. Единственное исключение составляют не-базовые записи MFT, о которых речь пойдет далее. Атрибут $FILE_NAME содержит имя файла, размер и временные штампы. Атрибут $STANDARD_INFORMATION содержит временные штампы, информацию о владельцах и безопасности. Последний существует во всех файлах и каталогах, потому что содержащиеся в нем данные необходимы для обеспечения безопасности данных и дисковых квот. В абстрактном понимании этот атрибут не содержит необходимых данных, но его присутствие необходимо для работы механизмов файловой системы прикладного уровня. Оба атрибута всегда являются резидентными.



Файлы метаданных файловой системы

Поскольку каждый байт тома выделяется некоторому файлу, административные данные файловой системы также должны храниться в файлах. Microsoft называет такие файлы файлами метаданных. Microsoft резервирует для файлов метаданных файловой системы первые 16 записей MFT. Неиспользуемые зарезервированные записи находятся в выделенном состоянии и содержат только базовую и общую информацию. Все файлы метаданных файловой системы отображаются в корневом каталоге, хотя обычно они скрываются от большинства пользователей. Имена файлов метаданных файловой системы начинаются с символа «$», а первая буква является прописной.

Таблица 11.1. Стандартные файлы метаданных файловой системы NTFS

Запись Имя файла Описание

0 $MFT Запись для самой таблицы MFT

1 $MFTMirr Содержит резервную копию первых записей MFT.

2 $LogFile Содержит журнал транзакций метаданных.

3 $Volume Содержит информацию о томе —метка, идентификатор и версия.

4 $AttrDef Содержит инфор-ю об атрибутах — значения идент-ра, имена, размеры.

5 . Содержит корневой каталог файловой системы.

6 $Bitmap Содержит признак выделения для каждого кластера файловой системы.

7 $Boot Содержит загрузочный сектор и загрузочный код файловой системы.

8 $BadClus Содержит кластеры, содержащие поврежденные секторы.

9 $Secure Содержит инфор-ю системы безопасности и упр-я доступом к файлам

10 $Upcase Содержит все символы Unicode в верхнем регистре

11 $Extend Каталог с файлами необязательных расширений. Microsoft обычно не размещает файлы этого каталога в зарезервированных записях MFT.



Порядок работы с NTFS

В NTFS первым шагом должна стать обработка загрузочного сектора в первом секторе файловой системы, являющегося частью файла $Boot. Из загрузочного сектора берутся сведения о начальном адресе MFT и размере каждой записи MFT. На основании этих сведений обрабатывается первая запись MFT, связанная с файлом $MFT. Из этой записи берется информация о местонахождении других записей MFT.



Все записи имеют одинаковый размер, поэтому найти запись с нужным номером несложно. После успешного поиска записи в таблице можно переходить к обработке атрибутов. Обработка записи MFT начинается с заголовка, после чего ищется первый атрибут. Далее мы читаем заголовок атрибута, определяем его тип и соответствующим образом обрабатываем содержимое. Местонахождение второго атрибута определяется по длине первого атрибута. Процедура повторяется до тех пор, пока не будут обработаны все атрибуты. За последним атрибутом следует маркер Oxffffffff.

Пример упрощенного чтения нефрагментированной MFT

#include

#include

int main()

{

struct{

DWORD TypeID;

UINT Length;

char Resident;

char NameLength;

WORD NameOffset;

WORD Flags;

WORD ID;

DWORD SizeContent;

WORD OffsetContent;

}HeaderAttrib;

struct{

char ParentDir[8];

UINT64 TimeCreate;

UINT64 TimeModif;

UINT64 TimeChange;

UINT64 TimeAcces;

UINT64 Size;

UINT64 RealSize;

UINT Attr;

UINT res;

char NameLength;

char NameSpace;

char FileName[100];

}NameAttr;

char buf[1024];

DWORD dwByteRead;

LARGE_INTEGER BeginMFTSector;

HANDLE h = CreateFile("\\\\.\\D:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if (h != INVALID_HANDLE_VALUE)

{

ReadFile(h, buf, 512, &dwByteRead, NULL);//read BOOT

UINT64 s = *((long long *)(buf + 48));

//UINT64 BeginMFTSector

BeginMFTSector.QuadPart = buf[13] * s * 512;

while (1){//cicle MFT

DWORD dwLow = SetFilePointer(h, BeginMFTSector.LowPart, (PLONG)&BeginMFTSector.HighPart, FILE_BEGIN);

ReadFile(h, buf, 1024, &dwByteRead, NULL);//file record

if (strncmp(buf, "FILE",4)) break;

WORD AttrOffset=*(WORD *)(buf + 20);

while (1)//cicle attrib

{

memcpy(&HeaderAttrib, buf + AttrOffset, sizeof(HeaderAttrib));//header attr

if (HeaderAttrib.TypeID == 0xffffffff) break;//last attr

if (HeaderAttrib.TypeID == 0x30)//name attribut

{

WORD FileAttrOffset = AttrOffset + HeaderAttrib.OffsetContent;

memcpy(&NameAttr, buf + FileAttrOffset, sizeof(NameAttr));

if (NameAttr.NameLength > 0)

{

char Name[30]; int j = 0;

for (int i = 0; i < NameAttr.NameLength * 2; i += 2)

Name[j++] = NameAttr.FileName[i];

Name[j] = '\0';

printf("%s\n", Name);

}

}

AttrOffset += HeaderAttrib.Length;

}

BeginMFTSector.QuadPart += 1024;

}

}

system("pause");

return 0;

}

Варианты заданий к лабораторной работе №6

  1. Вывести имена и основные характеристики атрибутов метафайла . (корневой каталог)

  2. Вывести имена и основные характеристики атрибутов метафайла $Bitmap

  3. Вывести имена и основные характеристики атрибутов метафайла $MFT

  4. Вывести имена и основные характеристики атрибутов метафайла $AttrDef

  5. Вывести имена и основные характеристики атрибутов метафайла $Volume

  6. Вывести имена и основные характеристики атрибутов метафайла $BadClus

  7. Вывести имена и основные характеристики атрибутов метафайла $LogFile

  8. Вывести имена и основные характеристики атрибутов метафайла $MFTMirr

  9. Вывести имена и основные характеристики атрибутов метафайла $Boot

  10. Вывести имена и основные характеристики атрибутов метафайла $Secure

  11. Вывести имена и основные характеристики атрибутов метафайла $UpCase

  12. Вывести имена и основные характеристики атрибутов метафайла $Extend

  13. Вывести имена и основные характеристики атрибутов метафайла $Quote

  14. Вывести состав корневой директории заданного диска

  15. Вывести имена файлов, содержащих нерезидентные атрибуты

Контрольные вопросы

  1. Назначение MFT, определение ее местоположения.

  2. Структура записи таблицы MFT.

  3. Резидентные и нерезидентные атрибуты.

  4. Назначение метафайлов.


Лабораторная работа № 7


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

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

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

Системный Реестр в WINDOWS NT является иерархической структурой, состоящей из разделов(key) и пар параметров(name-value pair). Эта структура используется как база данных, централизованно хранящая информацию о пользователях, приложениях, операционной системе и о конфигурации компьютера. Разделы HKEY - это средства доступа к разделам Реестра самого верхнего уровня. Они определяются в API Реестра и являются точкой входа для разработчиков к остальному дереву Реестра. Пара «параметр - значение» состоит из трех частей: имени параметра, значения параметра и типа данных, т.е. типа значения. Основные три типа данных: двойное слово (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

Твики реестра 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» (без кавычек, точно как указано - со всеми пробелами, большими буквами и т.д.). Ничего больше в этой строке быть не должно.

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

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

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

Формат этих строк зависит от вида изменяемых ключей:



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

Действие

Общий вид

Пояснения

Создание

"Название"=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 параметр с названием «Название» будет удален из реестра.

Если заметили, строка для удаления 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\Windows NT\CurrentVersion» создаст строковый параметр с названием «2» и значением «ХХХ» и удалит параметр с названием «22».

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

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

Функция RegOpenKeyEx - открытие раздела. При успешном открытии раздела функцией возвращается ERROR_SUCCESS , в противном случае - код ошибки:

LONG RegOpenKeyEx ( HKEY hKey, // дескриптор корневого раздела LPCTSTR lpSubKey, // указатель на адрес подраздела корневого раздела, в котором создается подраздел . DWORD ulOptions, //зарезервирован и равен 0. REGSAM samDesired, //доступ к разделу. PHKEY phkResult //адрес дескриптора открываемого ключа. ); .

Параметры: HKey - идентифицирует корневой ключ или один из ниже перечисленных : HKEY_CLASSES_ROOT, HKEY_CURRENT_USER. HKEY_LOCAL_MACHINE, HKEY_USERS. samDesired - определяет доступ к разделу.

PhkResult - обработчик раздела приложения, т. е. дескриптор открытого ключа. Пример написания функции: RegOpenKeyEx(HKEY_CURRENT_USER,"SOFTWARE",0,KEY_READ | KEY_WRITE,&hKey); . Эта функция открывает в корневом разделе HKEY_CURRENT_ USER подраздел SOFTWARE с разрешениями на создание подразделов, на запись данных подраздела, на получение данных подраздела, на перечисление подразделов, на извещение об изменении.

Функция RegCreateKeyEx создает новый подраздел внутри родительского. При успешном создании раздела функцией возвращается ERROR_SUCCESS , в противном случае - код ошибки. При создании нового подраздела необходимо сначала открыть его родительский раздел функцией RegOpenKeyEx. Функция RegCreateKeyEx открывает раздел, если он существует, или создает его с новыми атрибутами:

LONG RegCreateKeyEx( HKEY hKey, // дескриптор открытого ключа.

LPCTSTR lpSubKey, // адрес открываемого ключа не может быть равен NULL.

DWORD Reserved, // зарезервирован.

LPTSTR lpClass, // адрес имя класса или типа объекта.

DWORD dwOptions, // специальный тип раздела

REGSAM samDesired, // определяет маску доступа к ключу

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //указатель на структуру LPSECURITY_ATTRIBUTES PHKEY phkResult, //адрес дескриптора созданного ключа

LPDWORD lpdwDisposition //указатель на буфер, eсли ключ создан, то в поле определяемое LpdwDisposition, записывается значение REG_CREATED_NEW_KEY, а если ключ существовал и был открыт, - значение REG_OPENED_EXISTING_KEY.

Пример записи функции: RegCreatKeyEx (hKey,"MyKey", 0, "", REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, NULL,&hMyKey, lpdwDisposition).

Функция RegSetValueEx устанавливает значение раздела в реестре. При использовании этой функции необходимо открыть раздел, значение которого необходимо установить. Эта функция позволяет создавать несколько пар параметр- значение в одном разделе. При успешной установке функцией возвращается ERROR_SUCCESS , в противном случае - код ошибки:

LONG RegSetValueEx( HKEY hKey, // дескриптор ключа, к которому добавляются данные. LPCTSTR lpValueName,//-указатель на строку, содержащую имя добавляемых данных.

DWORD Reserved, // зарезервирован

DWORD dwType, // определяет тип информации, который будет сохранен в качестве данных. CONST BYTE *lpData, // указатель непосредственно на данные, которые будут сохранены.

DWORD cbData // размер данных, на который указывает предыдущий аргумент. ); .

Пример записи функции: RegSetValueEx((hMyKey, "m_name", 0, REG_SZ, (const unsigned char*)(LPCTSTR) lpszKeyValue, lpszKeyValue.GetLength()) .

Функция RegCloseKey закрывает раздел перед сохранением системных ресурсов:

LONG RegCloseKey( HKEY hKey //дескриптор закрываемого раздела, возвращенный функцией RegOpenKeyEx. ); .

Пример записи функции:

RegCloseKey(hMyKey) -закрывает подраздел My Key. При успешном закрытии раздела функцией возвращается ERROR_SUCCESS , в противном случае - код ошибки.

Функция RegFlushKey записывает изменения, сделанные в Реестре на диск. Необходимость использования RegFlushKey возникает, когда нужна гарантия записи изменения в Реестре перед выполнением остального кода. При успешном выполнении функцией возвращается ERROR_SUCCESS, в противном случае - код ошибки.

LONG RegFlushKey ( HKEY hKey //дескриптор ключа для записи. ); .

Пример записи функции: RegFlushKey(hMyKey).

Функция RegDeleteKey удаляет раздел вместе с его значениями, если в разделе существуют подразделы, его удалить нельзя. Нельзя удалить подраздел, если его родительский раздел был открыт функцией RegCreateKeyEx и не был закрыт функцией RegCloseKey:

LONG RegDeleteKey ( HKEY hKey, // дескриптор открытого ключа.

LPCTSTR lpSubKey // указатель на подстроку с именем удаляемого подраздела. ); .

Существует два способа удаления раздела: 1. В качестве первого параметра указать корневой раздел, во втором параметре - полный путь к удаляемому подразделу. 2. Открыть родительский раздел с помощью процедуры RegOpenKeyEx и затем передать его дескриптор в качестве первого параметра. В качестве второго параметра указывается имя дочернего раздела. Пример написания функции: RegDeleteKey (HKEY_CURRENT_USER,"SOFTWARE\\My Key").



Требования к программе

В программе должно быть реализовано:

1. Создание подраздела (название подраздела –должно совпадать с Вашей фамилией) в системном Реестре в разделе HKEY_CURRENT_USER в подразделе SOFTWARE и добавление параметра, содержащего текущую дату;

2. Изменение параметров подраздела в соответствии с вариантом;

3. Прочитать значение параметра из раздела HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System в соответствии с вариантом и объяснить его назначение ;

4. Окончание работы программы с сохранением изменений в системном Реестре; окончание работы программы без сохранения изменений в системном Реестре.

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

6. п.1,2,3 выполнить также написанием .REG файла.

Варианты



Прочитать значение параметра

Изменить значение параметра

1

SystemBiosVersion (System)

Переименовать корзину

2

SystemVersion (BIOS)

Удалить инф. о последнем пользователе

3

BIOSVendor

В переменную окружения path добавить путь к своей папке

4

BIOSVersion

Добавить переменную окружения со своей фамилией

5

BIOSReleaseDate

Отключить короткие имена

6

BaseBoardManufacturer

Очистить файл подкачки

7

SystemManufacturer

Снять пароль после экранной заставки

8

VendorIdentifier (CentralProcessor/0)

Установит пароль после экранной заставки

9

ProcessorNameString

Удалить значение переменной окружения ТМР

10

Identifier

Добавить переменную окружения с сегодняшней датой

11

~MHz

Включить короткие имена

12

SerialNumber (SCSI…)

Запретить перезагрузку компьютера

13

SystemManufacturer (BIOS)

Очистить файл подкачки

14

BIOSReleaseDate (BIOS)

Удалить значение переменной окружения ТЕМР

15

ProcessorNameString

Добавить переменную окружения бинарного типа, равную 10.

Контрольные вопросы

Системный Реестр. Основные функции программы RegEdit. API функции изменения, удаления, создания подраздела в системном Реестре. Сохранение изменения в системном Реестре после окончания работы приложения.




Поделитесь с Вашими друзьями:
  1   2   3   4


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал