Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы»




НазваниеМетодические указания к курсовой работе по дисциплине «Системное программирование и операционные системы»
страница5/11
Дата публикации05.03.2013
Размер1.32 Mb.
ТипМетодические указания
uchebilka.ru > Математика > Методические указания
1   2   3   4   5   6   7   8   9   10   11

Для получения подробной информации о носителе используется функция GetVolumeInformation. Она заполняет параметры информацией об имени тома, названии файловой структуры, максимальной длине имени файла, дополнительных атрибутах тома, специфических для файловой структуры.

Функция GetDiskFreeSpace сообщает информацию о размерах сектора и кластера и о наличии свободных кластеров.

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

Для работы с каталогами и файлами предназначены следующие функции:

Функция

Выполняемое действие


GetCurrentDirectory

Получение текущего каталога

SetCurrentDirectory

Смена текущего каталога

GetSystemDirectory

Получение системного каталога

GetWindowsDirectory

Получение основного каталога системы

CreateDirectory

Создание каталога

RemoveDirectory

Удаление каталога

CopyFile

Копирование файла

MoveFile

MoveFileEx

Перемещение или переименование файла

DeleteFile

Удаление файла

Для того, чтобы создать или открыть файл используется функция

HANDLE CreateFile(

LPCTSTR lpFileName, // pointer to name of the file

DWORD dwDesiredAccess, // access (read-write) mode

DWORD dwShareMode, // share mode

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security descriptor

DWORD dwCreationDistribution, // how to create

DWORD dwFlagsAndAttributes, // file attributes

HANDLE hTemplateFile // handle to file with attributes to copy

);

Параметр lpFileName определяет имя файла.

Параметр dwDesiredAccess задает тип доступа к файлу. Можно определить флаги GENERIC_READ и GENERIC_WRITE а так же их комбинацию для разрешения чтения или записи в файл.

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

Параметр lpSecurityAttributes указывает на структуру, описывающую защиту создаваемого объекта ядра. Ему может быть присвоено значение NULL.

Параметр dwCreationDistribution определяет действия функции в зависимости от того, существует ли уже файл с указанным именем.

Идентификатор

Файл уже существует

^ Файл еще не существует

CREATE_NEW

Ошибка

Создает файл

CREATE_ALWAYS

Уничтожает существующий файл и создает новый

Создает файл

OPEN_EXISTING

Открывает файл

Ошибка

OPEN_ALWAYS

Открывает файл

Создает файл

TRUNCATE_EXISTING

Открывает файл и урезает его до нулевой длины

Ошибка

Параметр dwFlagsAndAttributes определяет атрибуты файла, если он создается и задает режим работы с файлом.

Константа

^ Атрибут файла

FILE_ATTRIBUTE_ARCHIVE

Архивный

FILE_ATTRIBUTE_HIDDEN

Скрытый

FILE_ATTRIBUTE_NORMAL

Нет никаких атрибутов

FILE_ATTRIBUTE_READONLY

Только для чтения

FILE_ATTRIBUTE_SYSTEM

Системный

FILE_ATTRIBUTE_TEMPORARY

Временный (хранимый в памяти, но не удаляемый при закрытии)

Атрибуты файла могут комбинироваться за исключением FILE_ATTRIBUTE_NORMAL, который всегда используется в одиночестве.

Вместе с атрибутами могут комбинироваться и флаги, задающие режим работы с файлом.

Флаг

Режим работы с файлом

FILE_FLAG_NO_BUFFERING

Не осуществлять кэширование и опережающее чтение

FILE_FLAG_RANDOM_ACCESS

Кэшировать как файл произвольного доступа

FILE_FLAG_SEQUENTIAL_SCAN

Кэшировать как файл последовательного доступа

FILE_FLAG_WRITE_TROUGH

Не буферизовать операцию записи. Производить запись на диск немедленно.

FILE_FLAG_DELETE_ON_CLOSE

Уничтожить файл при закрытии. Полезно комбинировать с атрибутом FILE_ATTRIBUTE_TEMPORARY.

FILE_FLAG_OVERLAPPED

Работа с файлом будет осуществляться асинхронно.

Параметр hTemplateFile либо равен NULL, либо задает описатель открытого файла. Во втором случае параметр dwFlagsAndAttributes игнорируется, а указанный файл используется в качестве шаблона, т.е. используются его флаги и атрибуты.

В случае удачи функция CreateFile возвращает описатель открытого файла как объекта ядра. Существенно, что в противном случае она возвращает не NULL, а INVALID_HANDLE_VALUE.

Для работы с файлами используются следующие функции

Функция

Выполняемое действие

ReadFile

Чтение.

WriteFile

Запись

SetFilePointer

Позиционирование указателя

SetEndOfFile

Изменение размера файла

FlushFileBuffers

Принудительная запись буферов кэширования на диск

LockFile

LockFileEx

Блокировка части файла от записи другими потоками.

UnlockFile

UnlockFileEx

Разблокировка ранее заблокированной части файла

 

Перемещать, переименовывать, копировать или удалять папки вместе с файлами можно с помощью функции SHFileOperation.
Тема 9. Формат исполняемого PE-файле в Windows 98/NT.

Техническое задание.

Разработать программу, выводящую информацию об исполняемом PE-файле.

Методические указания.

Переносимый формат исполнимых файлов, - Portable Executable (PE) file format, - произведен от спецификации COFF ( общий формат объектных файлов - Common Object File Format ), который распространен на многих операционных системах семейства UNIX. В то же время, для сохранения совместимости с предыдущими версиями MS-DOS и Windows, PE формат также сохранил старый знакомый MZ заголовок DOSа.

^ Структура PE-файла

00h

DOS 2 Header
Заголовок ЕХЕ-файла DOS

1Ch

4 байта, выравнивающие форматированную область заголовка с 1Ch до 20h, это позволяет заголовку файла иметь красивый размер в 2 параграфа...

20h

^ OEM Identifier & OEM Info
Другими словами, информация о программе, практически никогда не присутствует, однако место должно быть зарезервировано.

3Ch

^ Offset to PE Header
Смещение реального PE заголовка в файле, DWORD

min 40h

Расположение программы-заглушки. На это поле указывает ReloOfs заголовка DOS 2 Header, соответственно его значение должно быть >=40h иначе такой файл как кандидат в PE рассматриваться вообще не будет

min 40h + XXh

Тело DOS программы, иначе говоря, STUB'a. Чаще всего говорит о невозможности запуска, но может содержать в себе очень разрушительные вещи, как то поиск в PATH и запуск файла WIN.COM с указанием имени данного файла и т.д.

XXh

^ PE Header
Здесь находится заголовок PE файла и, другими словами, начинается сама 32-битная программа, он должен быть выровнен на 8-байтовую границу

XXh

Object Table
таблица описаний секций файла, подробнее далее.

XXh

^ Image Pages (import info, export info, fixup info, resource info, debug info, etc...)
Остальная часть запускаемого файла...

Для проверки на возможность файла быть в формате PE необходимо, чтобы он был во первых EXE (байты по смещению 0h равны 5A4Dh), во вторых, слово по смещению 18h должно быть >=40h, тогда и только тогда DWORD поле по смещению 3Ch имеет смысл. Загрузчик, загружая EXE-файлы DOS с заголовком 'ZM' - 4D5Ah, не считает их 32-битовыми программами. При запуске из DOS-окна выполняется DOS часть программы, а при запуске с помощью CreateProcessA (консольная утилита START.EXE вызывает данный сервис) выдается сообщение о невозможности запуска программы, т.к. это не 32-битовое приложение.

Заголовок MS-DOS занимает первые 64 байта PE файла. Структура, определяющая его содержимое, описана ниже:

typedef struct _IMAGE_DOS_HEADER { // DOS .EXE заголовок

USHORT e_magic; // магическое число

USHORT e_cblp; // количество байт на последней странице файла

USHORT e_cp; // количество страниц в файле

USHORT e_crlc; // Relocations

USHORT e_cparhdr; // размер заголовка в параграфах

USHORT e_minalloc; // Minimum extra paragraphs needed

USHORT e_maxalloc; // Maximum extra paragraphs needed

USHORT e_ss; // начальное ( относительное ) значение регистра SS

USHORT e_sp; // начальное значение регистра SP

USHORT e_csum; // контрольная сумма

USHORT e_ip; // начальное значение регистра IP

USHORT e_cs; // начальное ( относительное ) значение регистра CS

USHORT e_lfarlc; // адрес в файле на таблицу переадресации

USHORT e_ovno; // количество оверлеев

USHORT e_res[4]; // Зарезервировано

USHORT e_oemid; // OEM identifier (for e_oeminfo)

USHORT e_oeminfo; // OEM information; e_oemid specific

USHORT e_res2[10]; // Зарезервировано

LONG e_lfanew; // адрес в файле нового .exe заголовка

} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

Первое поле, e_magic, этот так называемое магическое число. Это поле используется для идентификации типа файла, совместимого с MS-DOS. Все MS-DOS совместимые исполнимые файлы имеют сигнатуру 0x54AD, представляющую в ASCII-символах строку MZ (или ZM). По этой причине на заголовок MS-DOS часто ссылаются также как на MZ-заголовок. Большинство других полей имеет значение для операционной системы MS-DOS, для Windows же есть только одно важное поле в этой структуре. Это последнее поле, e_lfanew, 4х байтовое смещение в файле, указывающее расположение заголовока PE файла. Мы должны использовать это смещение, чтобы найти заголовок PE файла. Для PE файлов, заголовок PE файла расположен сразу же за заголовком MS-DOS и только тело программы Реального режима (STUB) расположена между ними.

Рассмотрим структуру PE Header.

Base

Size or Type

Name Of field

Brief description

00h

DWord

Signature Bytes

Сигнатурка того, что этот файл собственно говоря является PE - должна быть 4550h, иначе - 'PE',0h,0h; два последних байта под что-то-там Микрософт зарезервировала (и проверяет их равенству на 0!).

04h

Word

CPU Type

это поле указывает на предпочтительный тип процессора, на котором желательно запускать данную программу, вы редко увидите что-либо отличное от 14Ch -> i386

06h

Word

Num of Objects

это поле указывает на число реальных входов в Object Table

08h

DWord

Time/Date Stamp

используется для хранения даты и времени создания/модификации линкером

0Ch

DWord

Pointer to COFF table

дополнительный указатель определяющий местонахождение отладочной COFF таблицы в файлах

10h

DWord

COFF table size

кол-во символов в COFF таблице

14h

Word

NT Header Size

размер заголовка PE файла начиная с поля Magic, таким образом, общий размер заголовка PE файла составляет NT Header Size + 18h

16h

Word

Flags

указывает на предназначение программы, конкретное значение флагов см.ниже

18h

Word

Magic

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

1Ah

Byte

Link Major

старший номер версии использовавшегося при создании линкера

1Bh

Byte

Link Minor

младший номер версии использовавшегося при создании линкера (эти 2 поля загрузчик пока игнорирует)

1Ch

DWord

Size of Code

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

20h

DWord

Size of Init Data

размер секции инициализированных данных, очевидно не используется в Windows 95, но используется в NT, назначение аналогично приведенному выше

24h

DWord

Size of UnInit Data

размер секции неинициализированных данных,

28h

DWord

Entry point RVA

адрес, относительно Image Base по которому передается управление при запуске программы или адрес инициализации/завершения библиотеки

2Ch

DWord

Base of Code

RVA секции, которая содержит программный код

30h

DWord

Base of Data

RVA секции содержащей данные, в реальных экзешниках указывает и на .data и на .bss

34h

DWord

Image Base

виртуальный начальный адрес загрузки программы (ее первого байта). Должен быть на границе 64 Кб (связано с системой памяти Windows 95)

38h

DWord

Object align

выравнивание программных секций, должен быть степенью 2 между 512 и 256М включительно, так же связано с системой памяти. При использовании других значений программа не загрузится.

3Ch

DWord

File align

фактор используемый для выравнивания секций в программном файле. В байтовом значении указывает на границу на которую секции дополняются 0 при размещении в файле. Большое значение приводит к нерациональному использованию дискового пространства, маленькое увеличивает компактность, но и снижает скорость загрузки. Должен быть степенью 2 в диапазоне от 512 до 64К включительно. Прочие значения вызовут ошибку загрузки файла.

40h

Word

OS Major

старший номер версии ОС необходимой для запуска программы. (нулевое значение не позволяет запустить программу, остальные игнорируются проверялось на OSR2)

42h

Word

OS Minor

младший номер версии ОС

44h

Word

USER Major

пользовательский номер версии, задается пользователем при линковке программы и им же и используется

46h

Word

USER Minor

аналогично, младший номер

48h

Word

SubSys Major

старший номер версии подсистемы

4Ah

Word

SubSys Minor

аналогично, младший номер

4Ch

DWord

Reserved

Зарезервировано

50h

DWord

Image Size

виртуальный размер в байтах всего загружаемого образа, вместе с заголовками, кратен Object align

54h

DWord

Header Size

общий размер всех заголовков: DOS Stub + PE Header + Object Table

58h

DWord

File CheckSum

контрольная сумма всего файла, как и в DOS, ее никто не контролирует, а линкер ее ставит в 0

5Ch

Word

SubSystem

операционная подсистема необходимая для запуска данного файла (GUI, консоль...)

5Eh

Word

DLL flags

указывает на специальные потребности при загрузке, начиная с NT 3.5 устарел и не используется

60h

DWord

Stack Reserve Size

память требуемая для стека приложения, память резервируется, но выделяется только Stack Commit Size байтов, следующая страница является охранной.

64h

DWord

Stack Commit Size

объем памяти, отводимой в стеке немедленно после загрузки

68h

DWord

Heap Reserve Size

максимальный возможный размер локальной кучи

6Ch

DWord

Heap Comit Size

отводимая при загрузке куча

70h

DWord

Loader Flags

? начиная с NT 3.5 объявлено неиспользуемым, назначение неясно, но в целом связано с поддержкой отладки

74h

DWord

Num of RVA and Sizes

указывает размер массива VA/Size который следует ниже, зарезервировано под будущие расширения формата. В данный момент его значение всегда равно 10h

78h

DWord

Export Table RVA

RVA адрес таблицы экспорта

7Ch

DWord

Export Data Size

размер таблицы экспорта

80h

DWord

Import Table RVA

RVA адрес таблицы импорта

84h

DWord

Import Data Size

размер таблицы импорта

88h

DWord

Resource Table RVA

RVA адрес таблицы ресурсов

8Ch

DWord

Resource Data Size

размер таблицы ресурсов

90h

DWord

Exception Table RVA

RVA адрес таблицы исключений

94h

DWord

Exception Data Size

размер таблицы исключений

98h

DWord

Security Table RVA

? адрес таблицы безопасности

9Ch

DWord

Security Data Size

? размер таблицы безопасности

A0h

DWord

Fix Up's Table RVA

RVA адрес таблицы настроек

A4h

DWord

Fix Up's Data Size

размер таблицы настроек

A8h

DWord

Debug Table RVA

RVA адрес таблицы отладочной информации

ACh

DWord

Debug Data Size

размер таблицы отладочной информации

B0h

DWord

Image Description RVA

RVA адрес строки описани модуля

B4h

DWord

Description Data Size

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

B8h

DWord

Machine Specific RVA

? адрес таблицы значений специфичных для микропроцессора

BCh

DWord

Machnine Data Size

? размер таблицы значений специфичных для микропроцессора

C0h

DWord

TLS RVA

указатель на локальную область данных цепочек

C4h

DWord

TLS Data Size

размер области данных цепочек

C8h

DWord

Load Config RVA

?

CCh

DWord

Load Config Data Size

?

D0h

08h

Reserved

?

D8h

DWord

IAT RVA

?

DCh

DWord

IAT Data Size

? размер описанного поля

E0h

08h

Reserved

?

E8h

08h

Reserved

?

F0h

08h

Reserved

?




Total Structure size

F8h

Общий размер заголовка


CPU Type имеет следующие значения:

  • 014Ch - i386

  • 014Dh - i486

  • 014Eh - i586

  • 0162h - MIPS Mark I (R2000, R3000)

  • 0163h - MIPS Mark II (R6000)

  • 0166h - MIPS Mark III (R4000)

Flags имеет следующие битовые значения:

  • 0000h - это программа

  • 0001h - файл не содержит перемещений и таблицы перемещаемых элементов

  • 0002h - образ в файле можно запускать
    Если этот бит не установлен, то это обычно указывает на ошибку обнаруженную на этапе линковки

  • 0200h - загружать фиксированно
    Указывает на то, что программу можно грузить только по адресу, записанному в Image Base, если это невозможно, то такой файл лучше вообще не запускать.

  • 2000h - это библиотека

Magic имеет следующие значения:

  • 0107h - программа должна выполняться в ПЗУ (?)

  • 010Bh - нормальная программа для ОЗУ

(на самом деле можно ставить любое значение, программа грузится нормально)

SubSystem имеет следующие значения:

  • 0001h - Native

  • 0002h - Windows GUI, т.е. окошечная

  • 0003h - Windows Character (консольное приложение)

  • 0005h - OS/2 Character

  • 0007h - Posix Character

DLL Flags имеет следующие битовые значения:

  • 0001h - инициализация библиотеки на процесс

  • 0002h - завершение библиотеки на процесс

  • 0004h - инициализация библиотеки на поток

  • 0008h - завершение библиотеки на поток

Все прочие биты зарезервированы и желательно их установить в 0 значение.
Тема 10. Запуск в определенное время различных программ.

Техническое задание.

Разработать программу, позволяющую настроить компьютер для запуска в определенное время различных программ. Предусмотреть возможность запуска Trial-программ с ограниченным сроком использования.
Методические указания.

Для запуска внешних программ можно использовать функции WinExec, ShellExecute или CreateProcess. Предпочтительней использовать функцию CreateProcess, которая создает новый процесс и его основной поток. При этом новый процесс выполняет указанный исполняемый файл.

BOOL CreateProcess(

LPCTSTR lpApplicationName, // имя исполняемого файла

LPTSTR lpCommandLine, // командная строка

LPSECURITY_ATTRIBUTES lppa, // атрибуты защиты процесса

LPSECURITY_ATTRIBUTES lpta, // атрибуты защиты потока

BOOL bInheritHandles, // флаг наследования описателей

DWORD dwCreationFlags, // флаги создания

LPVOID lpEnvironment, // указатель блока переменных среды

LPCTSTR lpCurrentDirectory, // текущий каталог

LPSTARTUPINFO lpStartupInfo, // блок начальных параметров

LPPROCESS_INFORMATION lppi); // указатель структуры, описывающей порожденный процесс.

Функция возвращает TRUE в случае успеха и FALSE - в случае неудачи.

Параметры:

lpApplicationName - указатель на строку, содержащую имя исполняемой программы. Имя может быть полное. Если оно не полное, то поиск файла производится в текущем каталоге. Параметру может быть присвоено значение NULL. В этом случае в качестве имени файла выступает первая выделенная пробелами лексема из строки lpCommandLine;

lpCommandLine – указатель командной строки. Если параметр lpApplicationName имеет значение NULL, то имя исполняемого файла выделяется из lpCommandLine, а поиск исполняемого файла производится в соответствии с правилами, действующими в системе;

lppa - указатель на структуру, описывающую параметры защиты процесса. Если параметру присвоено значение NULL, то устанавливаются атрибуты “по умолчанию”;

lpta- указатель на структуру, описывающую параметры защиты первичного потока. Если параметру присвоено значение NULL, то устанавливаются атрибуты “по умолчанию”;

bInheritHandles - определяет, будет ли порожденный процесс наследовать описатели (handles) объектов родительского процесса. Например, если родительский процесс A уже до этого порождал процесс B, то он получил описатель процесса B и может им манипулировать. Если теперь он порождает процесс C с параметром bInheritHandles равным TRUE, то и процесс C сможет работать с описателем процесса B;

dwCreationFlags - определяет некоторые дополнительные условия создания процесса и его класс приоритета;

lpEnvironment- указатель на блок переменных среды порожденного процесса. Если этот параметр равен NULL, то порожденный процесс наследует среду родителя. Иначе он должен указывать на завершающийся нулем блок строк, каждая из которых завершается нулем (аналогично DOS);

lpCurrentDirectory - указатель на строку, содержащую полное имя текущего каталога порожденного процесса. Если этот параметр равен NULL, то порожденный процесс наследует каталог родителя;

lpStartupInfo - указатель на структуру STARTUPINFO, которая определяет параметры главного окна порожденного процесса;

lppi - указатель на структуру, которая будет заполнена информацией о порожденном процессе после возврата из функции.
Пример: программа, запускающая редактор Microsoft Word.

#include

#include

#include

int main()

{ PROCESS_INFORMATION pi ;

STARTUPINFO si ;

ZeroMemory( &si, sizeof(si)) ;

si.cb = sizeof( si ) ;

printf( "Press any key to start WinWord -- " );

getch() ;

CreateProcess( NULL, "WinWord", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) ;

return 0 ;

}

Функция GetLocalTime осуществляет выборку местного времени из структуры типа SYSTEMTIME. Эта функция имеет следующий синтаксис:

VOID GetLocalTime(LPTSYSTEMTIME lpst);

Определение структуры SYSTEMTIME

typedef struct _ SYSTEMTIME

{ WORD wYear;

WORD wMonth;

WORD wDayOfWeek;

WORD wDay;

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds;

} SYSTEMTIME;

Тема 11. Утилита, сохраняющая в файле информацию из системного реестра о программах, установленных на компьтере.

Техническое задание.

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

Методические указания.

Реестр – это централизованная иерархическая база данных конфигурации приложений и системы. Доступ к реестру осуществляется через разделы реестра, которые аналогичны каталогам файловой системы. Раздел может содержать другие разделы или пары «параметр – значение», которые можно уподобить именам файлов и их содержимому.

Пользователь или администратор могут просматривать и редактировать содержимое реестра с помощью редактора реестра, который вызывается командой REGEDIT32. Кроме того программы могут управлять реестром через функции API.

Точками входа в реестр служат несколько стандартных разделов.

  1. HKEY_LOCAL_MACHINE хранит физическую информацию о машине, а также данные об установленном программном обеспечении. Для каждой установленной программы создаются подразделы вида
    SOFTWARE\Название_компании\Название продукта\Версия.

  2. HKEY_USERS содержит данные конфигурации пользователей.

  3. HKEY_CURRENT_CONFIG содержит текущие параметры настройки, такие как разрешающая способность монитора и шрифты.

  4. HKEY_CLASSES_ROOT содержит подразделы, определяющие соответствие между расширениями файлов и классами и приложениями, используемыми оболочкой для доступа к объектам с этими расширениями. В этом разделе также записаны все данные, необходимые для объектной модели компонентов Microsoft (COM).

  5. HKEY_CURRENT_USER. Сюда относится информация данного пользователя, включая переменные окружения, принтеры и пользовательские настройки приложений.

Записи реестра, называемые параметрами, могут содержать данные различных типов. Среди них чаще всего используются данные, записанные в формате DWORD и строки.

Windows API содержит 26 функций, предназначенных для работы с реестром. Из всех этих функций в приложения обычно используются не более трех-четырех.

^ Управление разделами.

Функция RegOpenKeyEx открывает подраздел. Начиная с одного из стандартных зарезервированных разделов, можно обойти весь реестр и получить дескриптор любого нужного подраздела.

LONG RegOpenKeyEx (
HKEY hKey,
LPCTSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult)

Параметры.

hKey идентифицирует дескриптор открытого в данный момент раздела или одного из стандартных зарезервированных разделов; phkResult указывает на переменную типа HKEY, которая принимает дескриптор вновь открытого раздела.

lpSubKey – имя подраздела. Оно может содержать путь. Значение NULL вызывает открытие нового раздела – дубликата hKey. Значение ulOptions должно быть равно нулю.

samDesired – маска доступа, описывающая атрибуты безопасности нового раздела. Возможные значения - KEY_ALL_ACCESS, KEY_WRITE, KEY_QUERY_VALUE и KEY_ENUMERATE_SUBKEYS.

Возвращаемое значение – это обычно ERROR_SUCCESS. Любое другое значение указывает на ошибку. Для закрытия открытого раздела служит функция RegCloseKey, в единственном параметре которой указывается дескриптор раздела.

Чтобы получить имена подразделов, следует указать дескриптор раздела в функции RegEnumKeyEx.

Существуют также функции, предназначенные для получения пар «параметр – значение»: RegEnumValue и RegQueryValueEx. Функция RegSetValueEx записывает типизированные данные в поле значения открытого ключа.

RegEnumKeyEx выводит подразделы открытого раздела реестра подобно тому, как FindFirstFile и FindNextFile выводят содержимое каталога. Эта функция выдает имя раздела, строку класса и время последнего изменения.

LONG RegEnumKeyEx (
HKEY hKey,
DWORD dwIndex,
LPTSTR lpMame,
LPDWORD lpcbName,
LPDWORD lpReserved,
LPTSTR lpClass,
LPDWORD lpcbClass,
PFILETIME lpftLastWriteTime).

Параметр dwIndex при первом вызове должен быть равен нулю, а при каждом последующем – увеличиваться на единицу. Имя раздела и его размер, а также строка класса и ее размер возвращаются обычным способом. Функция возвращает ERROR_SUCCESS или значение ошибки.

Можно также создавать новые разделы. Для этого предназначена функция RegCreateKeyEx. Для удаления раздела служит функция RegDeleteKey.

Управление параметрами.

Вывести параметры указанного открытого раздела можно с помощью функции RegEnumValue. Следует указать индекс параметра: при первом вызове – нуль, при последующих – с увеличением на единицу. Функция выдает строку с именем параметра и его длиной. Также возвращается значение параметра и его тип.

LONG RegEnumValue (
HKEY hKey,
DWORD dwIndex,
LPTSTR lpValueName,
LPDWORD lpcbValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData ).

Текущее значение параметра возвращается в буфере, на который указывает lpData. Размер результата можно получить в lpcbData.

Тип данных, на который указывает lpType, может иметь множество значений, включая REG_BINARY, REG_DWORD, REG_SZ (строку) и REG_EXPEND_SZ (расширяемую строку с параметрами, заменяемыми переменными окружения). Список всех типов можно получить во встроенной справке.

Возвращаемое значение позволяет узнать, выведены ли все параметры. Значение равно ERROR_SUCCESS, если айден правильный параметр.

Функция RegQueryValueEx подобна приведенной выше за исключением того, что в ней указывается имя параметра, а не индекс. Эту функцию можно использовать, если известны имена параметров, в противном случае раздел следует просматривать с помощью RegEnumValueEx.

Чтобы установить значение параметра в открытом разделе, применяется функция RegSetValueEx. В ней указывается имя параметра, тип значения и само значение.

LONG RegSetValueEx (
HKEY hKey,
LPCTSTR lpValueName,
DWORD Reserved,
DWORD dwType,
^ CONST BYTE * lpData,
CONST cbData ).

Наконец, для удаления параметров служит функция RegDeleteValue.
Тема 12. Утилита для очистки системного реестра Windows 98.

Техническое задание.

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

Методические указания.

Смотри методические указания к предыдущей теме.
Тема 13. Утилита, отслеживающая изменения в файловой системе Windows 98 в заданных каталогах.

Техническое задание.

Разработать утилиту, позволяющую организовать слежение за изменениями объектов файловой системы.

Методические указания.

Windows позволяет организовать слежение за изменениями объектов файловой системы. Для этого служит функция FindFirstChangeNotification:

HANDLE FindFirstChangeNotification(LPCTSTR lpPathName, //Путь к папке,

// изменения в которой нас интересуют

  BOOL bWatchSubtree,  // Задает необходимость слежения за

                          // изменениями во вложенных папках

  DWORD  dwNotifyFilter); // Фильтр событий

Параметр dwNotifyFilter — это битовая маска из одного или нескольких следующих значений:

FILE_NOTIFY_CHANGE_FILE_NAME

Слежение ведется за любым изменением имени файла, в том числе за созданием и удалением файлов

FILE_NOTIFY_CHANGE_DIR_NAME

Слежение ведется за любым изменением имени папки, в том числе за созданием и удалением папок

FILE_NOTIFY_CHANGE_ATTRIBUTES

Слежение ведется за любым изменением атрибутов

FILE_NOTIFY_CHANGE_SIZE

Слежение ведется за изменением размера файлов. Изменение размера происходит при записи в файл. Функция ожидания срабатывает только после успешного сброса дискового кэша

FILE_NOTIFY_CHANGE_LAST_WRITE

Слежение ведется за изменением времени последней записи в файл, то есть фактически за любой записью в файл. Функция ожидания срабатывает только после успешного сброса дискового кэша

FILE_NOTIFY_CHANGE_SECURITY

Слежение ведется за любыми изменениями дескрипторов защиты

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

BOOL FindNextChangeNotification(HANDLE hChangeHandle).

По завершении работы идентификатор должен быть закрыт при помощи функции FindCloseChangeNotification:

BOOL FindCloseChangeNotification(HANDLE hChangeHandle).

Чтобы не блокировать исполнение основного потока программы функцией ожидания, удобно реализовать ожидание изменений в отдельном потоке.


1   2   3   4   5   6   7   8   9   10   11

Похожие:

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» iconМетодические указания к выполнению курсовой работы «Гребные электрические...
Методические указания к выполнению курсовой работы «гребные электрические установки» по дисциплине «электрические системы и комплексы...

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» iconМетодические указания к курсовой работе по курсу "Разведка месторождений полезных ископаемых"
Методические указания к выполнению курсовой работы по дисциплине «Разведка месторождений полезных ископаемых» (для студентов очной...

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» iconМетодические указания к курсовой работе по дисциплине «Теория электрическихцепей»

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» iconМетодические указания и задания к лабораторным работам по курсу «Архитектура компьютеров (АК)»
Методические указания к лабораторным работам по курсу “Архитектура компьютеров предназначены для студентов специальностей «Системное...

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» icon«Системное программирование и операционные системы»
Все цитаты, цифровой, фактический материал и библиографические сведенья проверены, запись единиц соответствует стандартам

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» iconМетодические указания к выполнению курсовой работы по дисциплине «Вычислительный практикум»
Методические указания к выполнению курсовой работы по дисциплине «Вычислительный практикум» для студентов заочной формы обучения...

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» iconМетодические указания к выполнению курсовой работы по дисциплине «Основы маркетинга»
Бобрушева В. В. Методические указания к выполнению курсовой работы по дисциплине «Основы маркетинга» для студентов 2 курса дневной...

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» iconМетодические указания к выполнению лабораторных работ по дисциплине...
Компьютерная инженерия” (для студентов дневной и заочной формы обучения специальности 091501 “Компьютерные системы и сети”, 091502...

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» iconМетодические указания к выполнению курсовой работы по дисциплине...
Методические указания к выполнению курсовой работы по дисциплине «Техническая термодинамика»/ Составители

Методические указания к курсовой работе по дисциплине «Системное программирование и операционные системы» iconМетодические указания к выполнению контрольной работы (ргр) по дисциплине...
Методические указания к выполнению контрольной работы (ргр) по дисциплине «Объектно-ориентированное программирование» (для студентов...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<