- •Введение
- •Тема 1. Двухпросмотровый ассемблер
- •Тема 2. Com-сервер для обработки и хранения результатов тестирования.
- •Тема 3. Дисковая утилита для просмотра fat.
- •Тема 4. Сервер автоматизации ole.
- •Тема 5. Дефрагментатор файловой системы.
- •Элемент каталога для короткого имени
- •Тема 6. Монитор системных ресурсов для Windows 98/2000.
- •Тема 7. Менеджер процессов и потоков для Windows 98/2000.
- •Тема 8. Файловый менеджер для Windows 98/2000/nt.
- •Тема 9. Формат исполняемого pe-файле в Windows 98/nt.
- •Тема 10. Запуск в определенное время различных программ.
- •Тема 11. Утилита, сохраняющая в файле информацию из системного реестра о программах, установленных на компьтере.
- •Тема 12. Утилита для очистки системного реестра Windows.
- •Тема 13. Утилита, отслеживающая изменения в файловой системе Windows в заданных каталогах.
- •Тема 14. Просмотрщик таблицы разделов и fat.
- •Тема 15. Утилита MaxSplitter
- •Тема 16. Утилита удаленного администрирования.
- •Тема 17. Простая почтовая программа на основе протокола smtp.
- •Тема 18. Ftp - клиент.
- •Тема 19. Ftp - сервер.
- •Тема 20. Системные сервисы Windows nt/2000.
- •Литература
- •Приложение 1. Tcp/ip Программирование с использованием WinSock
- •Создание и использование сокетов
- •Закрытие сокета
- •Функция shutdown()
- •Методы прекращения работы гнезда
- •Функция bind()
- •Приложение может послать запрос на соединение с помощью функции
- •Отправка и прием данных через сокеты потоков
- •Ожидание и обработка событий
- •Использование функции wsaAsyncSelect()
- •Приложение 2. Команды ftp
- •Приложение 3. Команды smtp
- •Приложение 4. Заголовки почты smtp
Тема 11. Утилита, сохраняющая в файле информацию из системного реестра о программах, установленных на компьтере.
Техническое задание.
Разработать утилиту, сохраняющую в файле информацию из системного реестра о программах, установленных на компьютере. Предусмотреть поиск информации в реестре по различным признакам.
Методические указания.
Реестр – это централизованная иерархическая база данных конфигурации приложений и системы. Доступ к реестру осуществляется через разделы реестра, которые аналогичны каталогам файловой системы. Раздел может содержать другие разделы или пары «параметр – значение», которые можно уподобить именам файлов и их содержимому.
Пользователь или администратор могут просматривать и редактировать содержимое реестра с помощью редактора реестра, который вызывается командой REGEDIT32. Кроме того программы могут управлять реестром через функции API.
Точками входа в реестр служат несколько стандартных разделов.
HKEY_LOCAL_MACHINE хранит физическую информацию о машине, а также данные об установленном программном обеспечении. Для каждой установленной программы создаются подразделы вида SOFTWARE\Название_компании\Название продукта\Версия.
HKEY_USERS содержит данные конфигурации пользователей.
HKEY_CURRENT_CONFIG содержит текущие параметры настройки, такие как разрешающая способность монитора и шрифты.
HKEY_CLASSES_ROOT содержит подразделы, определяющие соответствие между расширениями файлов и классами и приложениями, используемыми оболочкой для доступа к объектам с этими расширениями. В этом разделе также записаны все данные, необходимые для объектной модели компонентов Microsoft (COM).
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.
