
- •Классификация системного программного обеспечения
- •Другая классификация
- •Требования к системному программному обеспечению
- •2. Операционная система. Основные функции ос. Структура операционной системы.
- •3. Интерфейс прикладных программ (api) ос. Api Win32 (системные функции).
- •Api операционных систем.
- •Структура api-программ
- •4. Дисковая подсистема в архитектуре ibm pc.
- •5. Низкоуровневая организация дисковой памяти. Сервис bios доступа к дисковой подсистеме.
- •Емкость Диска
- •Оглавление Диска (Каталог)
- •Основные Положения На Память
- •6. Понятие файловой системы. Назначение, требования, функции. Способы организации фс.
- •7. Объекты файловой системы: файлы, директории, логические устройства, другие виды объектов. Файловая система
- •Имена файлов
- •Типы файлов
- •Логическая организация файла
- •Физическая организация и адрес файла
- •Права доступа к файлу
- •Кэширование диска
- •Общая модель файловой системы
- •Отображаемые в память файлы
- •Современные архитектуры файловых систем
- •8. Файловые системы на основе fat (либо по желанию ntfs, s5fs, ufs, ext и т.Д.).
- •9. Служебные структуры файловых систем fat и их использование.
- •1.3.2. Файловые системы
- •Файловая система fat Краткие теоретические сведения
- •Обзор файловой системы fat
- •Имена файлов в fat
- •Преимущества файловой системы fat
- •Недостатки файловой системы fat
- •Обзор файловой системы hpfs
- •Суперблок
- •Запасной блок
- •Преимущества файловой системы hpfs
- •Недостатки файловой системы hpfs
- •Обзор файловой системы ntfs
- •Надежность
- •Дополнительные функции
- •Поддержка posix
- •Устранение ограничений
- •Преимущества файловой системы fat
- •Недостатки файловой системы ntfs
- •Соглашения именования в ntfs
- •10. Программный интерфейс файловой системы (функции для взаимодействия с фс, файлового ввода-вывода) - dos, Win32.
- •12. Вычислительный процесс. Состояния вычислительного процесса.
- •[Править]Создание программ
- •[Править]Использование программ
- •[Править]Правовые аспекты
- •13. Адресное пространство процесса (задачи).
- •20. Адресное пространство процесса
- •14. Приложения Windows (Win 32), разновидности. Структура оконных (windowed) приложений.
- •2. Особенности приложений Win 32.
- •17. Событийное управление в Win32. Сообщения и очереди сообщений Windows (Windows messages): назначение, структура, отсылка, доставка, обработка.
- •18. Цикл обработки сообщений. Оконная процедура: назначение, выполнение, способы активизации и завершения. Краткие теоретические сведения
- •19. Многозадачность, многозадачные операционные системы, особенности выполнения приложений в многозадачной среде.
- •Краткие теоретические сведения поток
- •Краткие теоретические сведения
- •27. Взаимодействие процессов/потоков, взаимное исключение, синхронизация (базовые сведения)
- •Синхронизация субъектов взаимодействия
- •Сравнительная характеристика механизмов взаимодействия
- •33. Графическая подсистема Win32 (gdi) - общая характеристика, основные концепции, объекты (инструменты).
- •Х.1 Общие сведения
- •Х.2 Системы координат и единицы измерения
- •Х.3 Цвета и палитры
- •Х.4 Основные инструменты графической подсистемы
- •Х.4 Растровая графика
- •Х.5 Управление областями вывода и отсечением
- •Х.6 Некоторые аспекты использования графической подсистемы
- •34. Подсистема памяти. Основные задачи, функции, требования. 35. Виртуальное адресное пространство, управление памятью с использованием виртуального адресного пространства.
- •37. Подсистема памяти Win32. Регионы (области) памяти. Группы функций api подсистемы памяти.
- •38. Распределение памяти на уровне менеджера виртуальной памяти (vmm api - Win32). In (35) 3. Архитектура памяти в Win32® api. 3.2. Управление виртуальной памятью. Vmm.
- •39. Отображение файлов в память (File mapping - Win32).
- •4.1 Адресное пространство процесса.
- •4.2 Функции работы с виртуальной памятью.
- •4.3 Проецирование файлов в память
- •4.4.1 Запуск исполняемых файлов и динамически связываемых библиотек
- •4.4.2 Проецирование файлов данных
- •4.4.3 Взаимодействие процессов через общую область данных
- •4.4 Функции работы с кучами (heap-область)
- •4.5 Глобальные и локальные объекты "память"
- •4.6 Функции crt Memory api
- •X.2. Структура подсистемы памяти Win 32 и группы функций
- •40. Системный реестр Windows: назначение, организация, доступ.
4.5 Глобальные и локальные объекты "память"
Несколько неудачные термины, обозначающие специальные системные объекты, описывающие соответствующим образом выделенные блоки памяти. Выделение памяти под эти объекты происходит из кучи (heap). Появились в Win16, где существовали отдельные (локальные) кучи для каждого процесса, и одна общая (глобальная) куча, доступная всем процессам. Были определены отдельные объекты "локальная память" и "глобальная память", выделявшиеся соответственно из локальной и глобальной куч. В Win32 процесс может иметь более 1 кучи, и все кучи равноправны и могут рассматриваться как глобальные. Поэтому принципиального различия между объектами "глобальная память" и "локальная память" нет, особенности их функционирования и описывающих их типов являются следствием сохранения совместимости по вызовам API с прежней моделью.
Для доступа к объектам "память" служат описатели (handle), тип HGLOBAL и HLOCAL соответственно, для доступа же к их содержимому используется адрес начала блока данных объекта – обычный тип "указатель". Этот адрес может быть получен как непосредственно при создании объекта, так посредством специальной процедуры (см. ниже).
GlobalAlloc GlobalReAlloc GlobalFree GlobalLock GlobalUnlock GlobalFlags
Использование данных объектов не имеет особых преимуществ перед рассмотренными выше, и в целом не рекомендуется, но как минимум в одной ситуации они незаменимы: при использовании буфера обмена необходимо манипулировать объектом "глобальная память", содержащим данные буфера, что объясняется соображениями совместимости.
4.6 Функции crt Memory api
К функциям CRT Memory API (Runtime-библиотека работы с памятью) относятся обычные "старые" стандартные функции: malloc(), free() и т.д. CRT-функции используют функциональность куч и поддерживаются по соображениям совместимости (обеспечивают совместимый программный интерфейс с функциями Win32 API).
X.2. Структура подсистемы памяти Win 32 и группы функций
40. Системный реестр Windows: назначение, организация, доступ.
Системный
реестр
Реестр
Windows ХР (Windows registry) представляет собой
реляционную базу данных, в которой
аккумулируется вся необходимая для
нормального функционирования компьютера
информация о настройках операционной
системы, а также используемом совместно
с Windows программном обеспечении и
оборудовании. Все хранящиеся в реестре
данные представлены в стандартизированной
форме и четко структурированы согласно
предложенной разработчиками Windows
иерархической системе. С этой точки
зрения основное функциональное назначение
реестра Windows ХР можно определить следующим
образом: в процессе работы операционной
системы как ее базовым компонентам, так
и прикладным программам периодически
требуется получать сведения об
установленном на компьютере оборудовании
и его настройках, о параметрах и
ограничениях, о составе и размещении
других программ или библиотек. В данном
случае оптимальным вариантом организации
доступа к такой информации является ее
хранение в единой унифицированной базе
данных, поиск соответствующих сведений
в которой был бы возможен и для программных
средств, и для администратора компьютера,
желающего изменить конфигурацию Windows.
В роли этой базы данных и выступает
реестр. В NT-совместимых системных
платформах, а к ним относятся Windows NT 4,
Windows 2000, Windows ХР и более поздняя реализация
серверных операционных систем от
Microsoft Corporation, реестр играет ключевую
роль. Редактирование реестра Windows ХР
позволяет:
•
разрешать проблемы, возникающие в
процессе эксплуатации прикладного
программного обеспечения, гибко
настраивать режимы работы приложений;
•
устранять неполадки в работе оборудования,
вызванные некорректным использованием
различными устройствами ресурсов
операционной системы или драйверов;
•
настраивать параметры и ограничения
пользовательской среды Windows, изменять
заданные по умолчанию характеристики
операционной системы;
•
управлять быстродействием компьютера;
•
перераспределять ресурсы операционной
системы по усмотрению администратора
компьютера;
•
управлять конфигурацией компонентов
Windows и системных сервисов, что позволяет
оптимизировать работу операционной
системы в зависимости от назначения
компьютера и стоящих перед пользователем
задач.
Информация
в реестре Windows ХР, в отличие от операционных
систем предыдущих поколений, например,
Windows 3.x или Windows 95, хранится в бинарной,
то есть в двоичной форме, что позволяет
не только помещать в реестр значительно
больший объем различных данных, но и
существенно увеличить скорость работы
с ним. На практике это означает, что
взаимодействие с реестром Windows ХР
возможно только с помощью специализированного
программного обеспечения, в то время
как в более ранних реализациях Windows
пользователь мог изменять содержимое
реестра посредством любого текстового
редактора. Таким образом в составе
Windows ХР существует определенный набор
специальных системных компонентов,
являющихся средствами управления
реестром Windows и позволяющих вносить в
его конфигурацию те или иные изменения.
Еще одним важным моментом в понимании
специфики реестра применительно именно
к Windows ХР является тот факт, что на
максимальный размер реестра в данной
операционной системе не накладывается
никаких ограничений.
Реестр
Microsoft Windows ХР имеет многоуровневую
структуру, состоящую из четырех нисходящих
логических ступеней. К первой, самой
верхней в иерархии реестра ступени
относятся так называемые ветви (Hive
Keys), обозначать которые по их английскому
наименованию принято в виде аббревиатуры
HKEY_, за символом подчеркивания следует
обычно название самой ветви. Всего
в
реестре
Windows ХР
насчитывается
пять
ветвей:
HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS
и
HKEY_CURRENT_CONFIG.
Интерфейс
редактора реестра выглядит так
В
нижней части окна Редактора реестра
расположена строка состояния,
демонстрирующая размещение выделенного
вами элемента реестра. Например, если
в ветви HKEY_CURRENT_USER вы выберете ключ
AppEvents, в нем — подраздел EventLables и, наконец,
в последнем — подраздел Close, то в строке
состояния отобразится путь следующего
вида: Мой компьютер
\HKEY_CURRENT_USER\AppEvenr5\EventLables\Close. Помимо
обособленной справочной системы в
Редакторе реестра имеются контекстные
подсказки. Чтобы воспользоваться ими,
щелкните мышью на кнопке со знаком
вопроса в панели заголовка открытого
диалогового окна программы, после чего
укажите мышью интересующий вас
объект.
Полный
доступ к разделу реестра означает, что
пользователь или администратор компьютера
имеет возможность выполнять любые
действия над данным элементом реестра
и его дочерними объектами, включая
удаление подразделов, создание новых
разделов, изменение имен и значений
параметров. Чтобы открыть пользователю
или группе пользователей полный доступ
к какому-либо разделу реестра, проделайте
следующее:
•
откройте Редактор реестра;
•
выделите щелчком мыши ветвь, ключ или
подраздел, для которых вы желаете открыть
полный доступ;
•
выполните последовательность команд
Правка ? Разрешения (Edit * Permissions). На экране
появится окно настройки параметров
безопасности для выбранного раздела
реестра;
•
в поле Группы или пользователи (Group or
user names) выберите пользователя, которому
необходимо предоставить полный доступ
к разделу реестра;
•
в списке Разрешения для имя (Permissions for
name), где имя — имя выбранного пользователя,
установите флажок Разрешить (Allow) напротив
пункта Полный доступ (Full control)
Файлы
инструкций системного реестра Windows XP,
имеющие расширение .reg, содержат
определенный набор команд, которые
позволяют автоматически добавлять
данные в реестр. Использование REG-файлов
может быть очень полезно в тех случаях,
когда вам необходимо неоднократно и
быстро внести изменения в реестр, но не
хочется делать это вручную, либо в
ситуации, когда требуется добавить в
реестр идентичную информацию на
нескольких компьютерах. REG-файл можно
создать либо с использованием консольной
команды REG EXPORT, либо штатными средствами
Редактора реестра, выделив щелчком мыши
соответствующий подраздел в иерархической
структуре реестра, а затем выбрав пункт
Экспорт в командном меню Файл. Однако
в случае необходимости можно подготовить
REG-файл и вручную.
Системный реестр
Системный реестр (registry) – специальная системная база данных, в которой приложения и операционная система могут сохранять информацию о конфигурации. Хотя, как правило, с реестром приходится иметь дело лишь под Win32, в действительности он существовал еще в Windows 3.1, и соответствующие функции API имеются в последующих версиях. Как следует ожидать, реестры различных версий Windows могут считаться совместимыми на уровне поддержки в API.
Вопрос. Физическое размещение реестра
Системный реестр служит для осуществления ряда функций:
– хранение списка устройств – при установке и конфигуроировании Windows (Windows setup) диспетчер конфигураций Configuration manager заносит в реестр информацию об имеющемся оборудовании, а при изменении состава и/или свойств последнего – информацию об этих изменениях;
– сохранение информации из .INI-файлов при установке Windows поверх предыдущих версий;
– информация об устройствах "Plug-and-Play" (фактически сейчас это большинство устройств);
– хранение списка драйверов и значений их параметров (подобно использованию строки вида
"device = ..." файла CONFIG.SYS);.
– хранение конфигурации и значений параметров программного обеспечения, например, список "Авто-запуска";
– обслуживание различных административных программ, например, панель управления (Control Panel).
Данные в системном реестре хранятся в двоичном виде. Для работы с ними приложения должны использовать специальные системные функции. Различают т.н. hive (букв. "улей") ключей, т.е. их двоичный образ в структурах в памяти, называемых собственно реестром, и файлы данных реестра.
Реестр имеет иерархическую древовидную структуру. Узлы дерева называются ключами (key). Каждый ключ может содержать любое количество подключей (sub-key) и значений (values), причем и те, и другие организованы в виде неупорядоченных списков, элементам которых присвоены индексы начиная с нуля. Различие между ключами и подключами в действительности условно, фактически все ключи являются подключами различного уровня нескольких предопределенных ключей (см. ниже). Значения ключей могут быть строковыми, двоичными и числовыми, их типы описываются соответствующими кодами (см. ниже). Каждый ключ идентифицируется его именем, уникальным относительно вышестоящего ключа, открытые ключи идентифицируются описателем (номером), тип HKEY (handle). Имя подключа имеет длину не более MAX_PATH (260 байт) и не может содержать пробелы (?), символы \, * и ?, кроме того, имена, начинающиеся с точки, зарезервированы. Значения идентифицируются также именами и индексами в списке.
Для работы с ключом приложение должно открыть его. При открытии ключа необходимо указать открытый ранее ключ в качестве вышестоящего. Система всегда предоставляет четыре предопределенных (predefined) ключа верхнего уровня, которые считаются открытыми всегда и могут использоваться как точки входа в реестр:
– HKEY_LOCAL_MACHINE – описание возможных (фактически известных на данный момент) конфигураций машины;
– HKEY_CLASSES_ROOT – описание текущей конфигурации машины, ссылка на одну из конфигураций HKEY_LOCAL_MACHINE);
– HKEY_USERS – описание всех имеющихся пользователей;
– HKEY_CURRENT_USER – описание текущего пользователя, ссылка на одного из пользователей HKEY_USERS.
Значения остальных ключей (подключей) системно зависимо. Обычно присутствуют также следующие ключи верхнего уровня:
– HKEY_CURRENT_CONFIG – текущий подключ Config (ссылка) ключа HKEY_LOCAL_MACHINE;
– HKEY_DYN_DATA – информация о параметрах устройств Plug-and-Play, ссылка на часть данных HKEY_LOCAL_MACHINE; изменяется при изменении состава устройств; данный раздел может быть защищен от изменения прикладными программами.
По очевидным причинам другие ключи верхнего уровня произвольно добавить в реестр нельзя.
Отметим, что помимо собственно значений ключей (подключей), в них могут находиться также ссылки на значения других ключей, со всеми вытекающими последствиями. Так, например, изменения в содержимом HKEY_CURRENT_USER приводят к соответствующим изменениям в HKEY_USERS.
Пример. Структура реестра Windows 95.
– HKEY_LOCAL_MACHINE – специфическая для данного компьютера информация, доступная всем пользователями, используются следующие подключи (папки):
– Config – все альтернативные конфигурации, возможные для данного компьютера;
– Enum – информация обо всем оборудовании компьютера;
– Hardware – информация о последовательных портах и модемах;
– Network – информация о параметрах подключения к сети;
– Security – информация о защите и возможностях удаленного доступа и администрирования;
– Software – информация о программном обеспечении компьютера; используется программным обеспечением для установки собственной конфигурации;
– System - конфигурация драйверов и сервисов в системе;
– HKEY_CURRENT_CONFIG – указывает на актуальный подключ ключа HKEY_LOCAL_MACHINE\Config;
– HKEY_DYN_DATA – ссылки на часть информации в HKEY_LOCAL_MACHINE, относящейся к устройствам Plug-and-Play, Эта информация изменяется при подключении и отключении устройств;
– HKEY_CLASSES_ROOT – ссылки на часть информации в HKEY_LOCAL_MACHINE, относящейся к программному обеспечению;
– HKEY_USERS – информация о всех пользователях данного компьютера (каждому выделяется подключ);
– HKEY_CURRENT_USER – ссылка на подключ текущего пользователя системы.
NT:
HKEY_LOCAL_MACHINE\Hardware, \SAM, \Security, \Software, \System
HKEY_LOCAL_MACHINE\System\ControlSetnnn –
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control, \Enum, \Hardware Profiles, \Services
HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control, \Enum, \Services
HKEY_CURRENT_CONFIG\Software\Microsoft\Windows\CurrentVersion\Internet Settings
Приложение (прикладная программа) может хранить в реестре любые свои данные, однако, как правило, такой подход оправдан только для инициализирующей и конфигурационной информации, а также данных, которые должны быть сделаны доступными для других программ. При записи новых подключей в реестр следует соблюдать следующий порядок:
– информация, общая для всех пользователей, должна заноситься в ключ вида:
HKEY_LOCAL_MACHINE\Software\MyCompany\MyProduct\Version_#;
– информация специфичная для пользователя должна заноситься в ключ вида:
HKEY_CURRENT_USER\Software\MyCompany\MyProduct\Version_#\...
Кроме того, существует еще несколько правил, выполнение которых если не обязательно, то крайне желательно, так как количество элементов данных в реестре и их объем достаточно критичны для функционирования системы:
– в реестр записываются только данные о конфигурации и инициализации приложения, остальные данные должны храниться в другом месте;
– данные размером более 2 Кбайт (ориентировочно) должны храниться в файле, в реестр же записывается только имя и расположение этого файла;
– исполняемый код не должен храниться в реестре;
– следует по возможности группировать свои данные в структуру, а не создавать ключ для каждого элемента данных, так как значения занимают меньше места, чем ключи;
– при корректном удалении (деинсталляции) приложения оно должно удалить из реестра все свои данные либо дать системе или другому (контролирующему) приложению необходимую для этого информацию.
К сожалению, перечисленные правила, несмотря на простоту, выполняется не всегда, особенно последнее.
(Существует значительное количество программ для очистки реестра от недействительных значений и ссылок, оставшихся после переконфигурирования системы и удаления программного обеспечения. Практикуется как минимум два основных подхода: ведение базы данных о всей последовательности модификаций реестра с возможностью восстановления предыдущих состояний, и простая сверка всех значений и ссылок на соответствие реальному содержимому диска и составу устройств в системе.)
Рассмотрим некоторые функции для работы с системным реестром.
Любые манипуляции с ключами возможны после их открытия. При создании нового ключа он также является открытым. Доступ к открытому ключу осуществляется по его описателю (handle), тип HKEY.
Первые 4 предопределенных ключа верхнего уровня считаются всегда открытыми, их описатели представлены одноименными константами.
Функции RegCreateKey, RegCreateKeyEx
Действие: создание нового подключа или открытие существующего.
Формат функций:
RegCreateKey(
HKEY hKey, LPCTSTR lpSubkeyName, PHKEY phSubkey
);
RegCreateKeyEx(
HKEY hKey, LPCTSTR lpSubkeyName, DWORD dwReserved, LPTSTR lpClass,
DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurity,
PHKEY phSubkey, LPDWORD lpDisposition
);
Возвращаемое значение: при успешном завершении значение ERROR_SUCCESS, иначе – ненулевой код ошибки.
Параметры:
hKey – описатель (номер) открытого ключа, ышестоящего по отношению к создаваемому (открываемому);
lpSubkeyName – имя создаваемого (открываемого ключа); в RegCreateKey может быть NULL, если hKey ссылается на предопределенный ключ, в этом случае вернет описатель, совпадающий с hKey;
phSubkey – указатель на переменную, которой передается значение описателя созданного (открытого) функцией подключа;
dwReserved – зарезервирован, должен быть нулевым;
lpClass – строка, определяющая класс ключа (тип объекта);
dwOptions – задает тип ключа, возможны следующие варианты: REG_OPTION_NON_VOLATILE (постоянный, сохраняется в реестре и доступен после перезагрузки системы; действует по умолчанию), REG_OPTION_VOLATILE (непостоянный; не применяется к уже существующим ключам, в Windows 95 игнорируется) или REG_OPTION_BACKUP_RESTORE (перекрывает требования параметра samDesired и требует права, необходимые для сохранения/восстановления ключа; в Windows 95 игнорируется);
samDesired – битовая маска прав доступа к ключу, формируемая из флагов: KEY_CREATE_LINK (создание ссылки), KEY_CREATE_SUB_KEY (создание подключа), KEY_ENUMERATE_SUB_KEYS (получение списка??), KEY_EXECUTE (чтение), KEY_NOTIFY (change notification??), KEY_QUERY_VALUE (получение значений), KEY_SET_VALUE (установка зачений), а также KEY_READ (объединяет QUERY, ENUMERATE и NOTIFY), KEY_WRITE (объединяет SET и SUB_KEY) и KEY_ALL_ACCESS (объединяет все предыдущие);
lpSecurity – указатель на структуру параметров защиты ключа, может быть NULL;
lpDisposition – указатель на переменную, в которую будет передано одно из значений, позиционирующих открытый функцией подключ: REG_CREATED_NEW_KEY (создан новый ключ) или REG_OPENED_EXISTING_KEY (открыт существующий).
Функции RegOpenKey, RegOpenKeyEx
Действие: открытие существующего подключа.
Формат функций:
RegOpenKey(
HKEY hKey, LPCTSTR lpSubkeyName, PHKEY phSubkey
);
RegOpenKeyEx(
HKEY hKey, LPCTSTR lpSubkeyName, DWORD dwOptions,
REGSAM samDesired, PHKEY phSubkey
);
Возвращаемое значение: аналогично RegCreateKey и RegOpenKeyEx.
Параметры: аналогичны RegCreateKey и RegOpenKeyEx, за исключением
dwOptions – резервировано, должен быть нулевым.
Функции RegCloseKey
Действие: закрытие открытого подключа, при необходимости сохранение изменений в реестре.
Формат функции:
LONG RegCloseKey(HKEY hKey), RegCloseKey(HKEY hKey)
Возвращаемое значение: ERROR_SUCCESS или ненулевой код ошибки.
При использовании RegCloseKey реальная запись измененного ключа может быть на некоторое время отложена системой (обычный механизм lazy write). Следующая функция требует физического сохранения изменений (обычно это не практикуется).
Функция RegFlushKey
Действие: принудительная запись данных ключа в реестр, возврат из функции только после реального завершения записи.
Формат функции:
LONG RegFlushKey(HKEY hKey)
Возвращаемое значение: ERROR_SUCCESS или ненулевой код ошибки.
Функция RegDeleteKey
Действие: удаление указанного подключа со его всеми значениями.
Формат функции:
LONG RegDeleteKey(HKEY hKey,LPCTSTR lpSubkey)
Возвращаемое значение: ERROR_SUCCESS или ненулевой код ошибки.
Параметры:
hKey – описатель открытого ключа, вышестоящего по отношению к удаляемому;
lpSubkey – имя или адрес удаляемого подключа.
Замечание: Если удаляемый ключ имеет подключи, то в Windows 95 они удаляются вместе с ним. В Windows NT такой ключ удален быть не может.
Функция RegSaveKey
Действие: запись указанного подключа со его всеми значениями и подключами в отдельный файл.
Формат функции:
LONG RegSaveKey(
HKEY hKey,LPCTSTR lpFileName,LPSECURITY_ATTRIBUTE lpSecurity
)
Возвращаемое значение: ERROR_SUCCESS или ненулевой код ошибки.
Параметры:
hKey – описатель открытого ключа;
lpFileName – имя файла (обязательно нового, т.е. не существующего в момент вызова);
lpSecurity – параметры защиты, может быть NULL.
Функция RegLoadKey
Действие: загрузка из файла указанного подключа со его всеми значениями и подключами в реестр.
Формат функции:
LONG RegLoadKey(HKEY hKey,LPCTSTR lpSubkeyName,LPCTSTR lpFileName)
Возвращаемое значение: ERROR_SUCCESS или ненулевой код ошибки.
Параметры:
hKey – описатель открытого ключа, вышестоящего по отношению к загружаемому;
lpSubkeyName – имя загружаемого подключа;
lpFileName – имя файла с данными реестра.
Функция RegRestoreKey
Действие: обновление ключа с его значениями и подключами данными из файла, вся текущая иерархия указанного ключа будет удалена и заменена на новую.
Формат функции:
LONG RegRestoreKey(HKEY hKey,LPCTSTR lpFileName,DWORD dwFlags)
Возвращаемое значение: ERROR_SUCCESS или ненулевой код ошибки.
Параметры:
hKey – описатель открытого ключа, с которого начинается обновление;
lpFileName – имя файла с данными реестра;
dwFlags – может быть установлено значение REG_WHOLE_HIVE_VOLATILE, укзывающее, что данные ключа будут считаться непостоянными (действуют до перезагрузки).
Функция RegConnectRegistry
Действие: присоединение ключа из реестра другой (удаленной) машины и получение его описателя.
Формат функции:
LONG RegConnectRegistry(LPTSTR lpMachine,HKEY hKey,PHKEY phConnected)
Возвращаемое значение: ERROR_SUCCESS или ненулевой код ошибки.
Параметры:
lpMachine – имя удаленной машины (сетевое);
hKey – предопределенный описатель ключа (в удаленном реестре), может быть HKEY_LOCAL_MACHINE или HKEY_USERS, но не HKEY_CLASSES_ROOT или HKEY_CURRENT_USER;
phConnected – указатель на переменную, которой будет присвоено значение описателя присоединенного ключа.
RegUnLoadKey – выгрузка ключа из реестра. Выгружать можно предопределенные ключи, ключи, присоединенные RegConnectRegistry, и ключи, созданные RegLoadKey. Выгрузка затрагивает только hive реестра, но не файлы данных.
RegReplaceKey – замена файла, из которого восстанавливаются ключи, другим; возымеет действие после перезагрузки.
Замечание: Имена файлов, используемых для манипуляций с реестровой информацией в ФС FAT не должны иметь расширений.
Функции RegEnumKey, RegEnumKeyEx
Действие: чтение подключа данного ключа по номеру, получение списка подключей
Формат функций:
LONG RegEnumKey(
HKEY hKey, DWORD dwIndex, LPTSTR lpSubkeyName, DWORD cbSubkeyName
)
LONG RegEnumKeyEx(
HKEY hKey, DWORD dwIndex, LPTSTR lpSubkeyName, DWORD cbSubkeyName,
LPDWORD lpReserved, LPTSTR lpClass, LPDWORD lpcbClass,
PFILETIME lpLastWriteTime
)
Возвращаемое значение: ERROR_SUCCESS, или ненулевой код ошибки, в т.ч. ERROR_NO_MORE_ITEMS если список исчерпан.
Параметры:
hKey – описатель открытого ключа;
dwIndex – порядковый номер (индекс) запрашиваемого подключа; индексы начинаются с 0 и инкрементируются для каждого последующего значения;
lpSubkeyName и – указатель на буфер для имени подключа;
cbSubkeyName или lpcbSubkeyName – параметр – размер буфера ("обычная" функция) или указатель на переменную с этим размером ("расширенная")
lpReserved – зарезервировано, должно быть NULL;
lpClass, lpcbClass – указатели на имя класса найденного подключа и двойное слово с его длиной, может быть NULL;
lpLastWriteTime – указатель на структуру FILETIME (см. выше), заполняемую временем последней записи в подключ.
Коды типов значений ключей: REG_BINARY (двоичный блок), REG_DWORD (двойное слово, машинно-зависимый формат); REG_DWORD_LITTLE_ENDIAN (двойное слово, формат Intel – младший байт по младшему адресу); REG_DWORD_BIG_ENDIAN (двойное слово, старший байт по младшему адресу); REG_SZ (ASCIIZ-строка); REG_MULTI_SZ (массив ASCIIZ-строк, признак конца – пустая строка, т.е. два байта \0 подряд); REG_EXPAND_SZ (ASCIIZ-строка – имя переменной окружения); REG_LINK (ссылка); REG_NONE (тип не определен), REG_RESOURCE_LIST (список ресурсов драйвера).
Отметим, что константы REG_DWORD и REG_DWORD_LITTLE_ENDIAN, по крайней мере в MS Visual C++, не означают ,как следовало бы ожидать, один и тот же формат данных, а просто имеют одно и то же числовое значение. Поэтому, в частности, их нельзя одновременно употреблять в конструкции switch – case.
Функции RegQueryValue, RegQueryValueEx
Действие: чтение значения из ключа по имени.
Формат функций:
LONG RegQueryValue(
HKEY hKey, LPCTSTR lpSubkey, LPTSTR lpValue, PLONG lpcbValue,
);
LONG RegQueryValueEx(
HKEY hKey, LPTSTR lpValueName,LPDWORD lpReserved,LPDWORD lpdwType,
LPTSTR lpValue, PLONG lpcbValue
);
"Обычный" вариант функции ограничен по количеству обрабатываемых значений одного ключа.
Функция RegQueryMultipleValues
Действие: чтение значения из ключа по номеру данных, чтение списка значений
Формат функции:
LONG RegQueryValue(
HKEY hKey, PVALENT pList,DWORD dwValNum,
LPTSTR lpValBuf,LPDWORD lpdwTotalSize
);
Возвращаемое значение: ERROR_SUCCESS или ненулевой код ошибки, в т.ч. ERROR_NO_MORE_ITEMS если список исчерпан.
Параметры:
hKey – описатель открытого ключа;
pList – указатель на массив структур VALENT с описанием содержимого ключа;
dwValNum – количество элементов массива;
lpValBuf – указатель на буфер для считываемых значений;
lpdwTotalSize – указатель на переменную, в которую будет записан занятый или требуемый размер буфера.
Весь список значений может быть получен следующей функцией.
Функция RegEnumValue
Действие: чтение значения из ключа по номеру данных, чтение списка значений
Формат функции:
LONG RegEnumValue(
HKEY hKey, DWORD dwIndex, LPTSTR lpValName, LPDWORD lpcbValName,
LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData
)
Возвращаемое значение: ERROR_SUCCESS или ненулевой код ошибки, в т.ч. ERROR_NO_MORE_ITEMS если список исчерпан.
Параметры:
hKey – описатель открытого ключа;
dwIndex – порядковый номер (индекс) запрашиваемого значения; индексы начинаются с 0 и инкрементируются для каждого последующего значения;
lpValName и lpcbValName – указатели на строку с именем значения и двойное слово с ее длиной;
lpReserved – зарезервировано, должно быть NULL;
lpType – указатель на переменную типа полученного значения, может быть NULL если не требуется; возможные значения – перечисленные выше константы;
lpData и lpcbData – указатели на буфер для считываемого значения и двойное слово с его размером; могут быть NULL если значение не требуется (?).
RegSetValue, RegSetValueEx – запись нового имени данных в ключе и запись этих данных
RegQueryValue, RegQueryValueEx – чтение значения из ключа по имени
RegNotifyChangeKeyValue – задание события, которое должно происходить при изменении заданного значения в реестре (см. x.x.x).
Журналы Windows NT
Подобно тому, как реестру систематизирует и централизует хранение данных различных программ различного назначения, журналы (Event Logs) предоставляют единую унифицированную технологию протоколирования событий, ошибок и диагностических сообщений для всех программ в системе. Журналы поддерживаются только в Windows семейства NT начиная с версии 3.1.
Система поддерживает три основных журнала, сведения о которых содержатся в соответствующих подключах ключа реестра \HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\EventLog:
– журнал приложений (Application) – используется прикладными программами;
– системный журнал (System) – используется драйверами и службами;
– журнал системы безопасности (Security).
Помимо расположения файла журнала, в реестре отражается и дополнительные сведения, включая указание программы, использующей журнал, описание специфических для нее сообщений и т.д.
Объект или событие, информация о котором заносится в журнал, принято называть событием (Event). Журналы позволяют фиксировать события 5 типов, идентифицируемых числовыми константами.
Таблица (X+1).1
Типы журналируемых событий
Тип события |
Значение |
Описание |
EVENTLOG_ERROR_TYPE |
1 |
Сообщения об ошибках |
EVENTLOG_WARNING_TYPE |
2 |
Предупреждения |
EVENTLOG_INFORMATION_TYPE |
4 |
Информационные сообщения |
EVENTLOG_AUDIT_SUCCESS |
8 |
Сообщение аудита – успешная операция |
EVENTLOG_AUDIT_FAILURE |
16 |
Сообщение аудита – неуспешная операция |
Журналы хранят не полную информацию о событиях, а лишь признаки того, что эти события происходили – числовые идентификаторы (номера), начиная с 1. Тексты сообщений содержатся в отдельном файле сообщений. Так как каждая программа, использующая журнал, может описывать собственные события, ведется также отдельных файл категорий, где отражается классификация событий и особенности их протоколирования. Для хранения информации о параметрах, описывающих события, служит файл параметров. Косвенное обращение к текстовой информации (например, строкам сообщений), т.е. манипулирование числовыми идентификаторами, упрощает многоязыковую поддержку службы журналирования. Несмотря на достаточно компактное представление информации в журнале, не следует злоупотреблять внесением в него незначительных сообщений, в первую очередь из-за сложности управления длинными списками и их просмотра. Удаление записей из журнала обычно либо производится либо, либо устанавливается лимит на размер журнала.
Примечание. Иногда само ведение журнала может служить источником ошибок, например, при блокировке доступа к разделу, где находятся файлы журнала. В некоторых случаях это нарушает обработку журналируемых ошибок.
Кроме соответствующей системной утилиты (Managements Controls), предоставляется также и программный интерфейс подсистемы журналирования, который включает несколько групп функций. Использование журнала распадается на 3 основных этапа: открытие журнала, модифицирующие вызовы и закрытие. На этом уровне любые действия над журналом выполняются не автоматически, а инициируются прикладной программой, система лишь исполняет и контролирует доступ.
Открытие журнала с целью протоколирования сообщений выполняется функцией
HANDLE RegisterEventSource(lpUNCServerName,lpSourceName).
Здесь первый параметр специфицирует имя сервера в сети, выполняющего протоколирование, может быть NULL, если процесс ограничен одной локальной машиной. Второй параметр – имя файла журнала из соответствующего подключа реестра.
Информация об очередном известном событии вносится в журнал функцией
ReportEvent(hEventLog, wType, wCategory, dwEventID, lpUserSid, wNumStrings, dwDataSize, lpStrings, lpRawData).
В журнал обязательно заносятся тип и категория события, а также его текст, извлекаемый из файла сообщений в соответствии с заданным идентификатором dwEventID. Кроме того, в журнал может быть занесена дополнительная информация (параметры) в виде последовательности строк (двойной указатель lpStrings) и блока двоичных данных (указатель lpRawData). Опциональным является параметр lpUserSid – указатель на объект безопасности (см. тему подсистема безопасности) источника записи в журнал.
Открытый журнал закрывается функцией
BOOL DeregisterEventSource(hEventLog).
Открытие журнала с целью его администрирования выполняется функцией
HANDLE OpenEventLog(lpUNCServerName,lpSourceName).
После этого на открытом журнале можно выполнять различные действия:
ReadEventLog() – чтение;
BackupEventLog() – создание резервной копии;
ClearEventLog() – очистка журнала, и т.д.
Открытый OpenEventLog() журнал закрывается функцией
BOOL CloseEventLog(hEventLog).
Как было указано выше, программы могут самостоятельно регистрировать собственные события со специфическими параметрами. При этом они должны также самостоятельно зарегистрировать в системе соответствующую информацию.
Все файлы, связанные с журналом, представляют собой модули DLL, программный код которых ограничивается единственной (обязательной) пустой головной функцией, например, DLLMain (имя может зависеть от системы программирования). Эта функция возвращает значение TRUE (нормальная успешная инициализация модуля). В качестве данных к модулю присоединяется на этапе компоновки (linking) RES-файл, полученный компилятором сообщений MC из исходного текста сообщений.
Исходный текст сообщений, т.н. MC-файл, представляет собой последовательность текстовых (ASCCII) строк и состоит из необязательного заголовка и последовательности блоков описания сообщений. Каждый такой блок начинается с директивы MessageID, вводящей идентификатор очередного сообщения.
В результате трансляции файла сообщений появляется также заголовочный файл C/CPP с константами – идентификаторами сообщений, который используется затем в прикладных программах.