Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах Недокументированные возможности Windows XP. Реестр. Часть 1


Уважаемые подписчики, на нашем сайте (http://www.onestyle.com.ua) организован опрос, тема которого: 'Содержимое какой из книг вы бы хотели прочитать в будущих статьях на нашем сайте?'. Голосуйте на сайте за одну из книг, содержимое которой вы хотели бы видеть в номерах данной рассылки.
Другие наши рассылки:
  • Новости IT-мира: Ежедневно ссылки на новости и статьи сайтов ixbt.com, thevista.ru, xakep.ru, securitylab.ru, oszone.ru, inattack.ru, ht.ua, overclockers.ru, центр загрузки Microsoft, softportal.com, realcoding.net, 3dcenter.ru, ladoshki.com, smti.ru, seonews.ru, ibm.com и др.

Книга "Недокументированные возможности Windows XP. Библиотека пользователя", Глава 2. Реестр Windows XP. Часть 1. HKEY_CLASSES_ROOT.

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

Так уж получилось, что в Windows XP реестр реализован в виде набора файлов, доступ к которым можно получить только программным путем. Мы не будем сейчас касаться содержимого этих файлов — это не является главной темой книги. Также мы не будем описывать работу с программами для доступа к реестру — данная глава предназначена для тех, кто уже имеет некоторый опыт в использовании реестра. Но, несмотря на это, хотелось напомнить некоторые сведения для тех, кто уже забыл, как работать с реестром (но имеет опыт работы с ним — иначе стоит купить отдельную книгу, посвященную именно этой теме).

Итак, начнем. Для доступа к реестру в Windows XP применяется стандартная программа операционной системы regedit.exe, расположенная в каталоге %systemroot%. После ее запуска перед вами отобразится окно, состоящее из двух областей — в левой области отображаются ветви реестра, а в правой — содержащиеся в них параметры и их значения. Ветви реестра не произрастают из ничего, они имеют определенную точку монтирования — папку МОЙ КМПЬЮТЕР. При этом стоит сказать, что от точки монтирования отходит пять ветвей (ни больше, ни меньше), называемых корневыми разделами, и делящих содержащуюся в реестре информацию на определенные категории. Давайте кратко опишем эти корневые разделы.

  • HKEY_CLASSES_ROOT — данный раздел содержит в себе сведения обо всех расширениях файлов и ActiveX-объектах, зарегистрированных в системе. Именно содержимому этого раздела и посвящен данный раздел главы о параметрах реестра.
  • HKEY_CURRENT_USER — этот раздел содержит в себе сведения о параметрах настройки оболочки Windows и конкретных установленных в ней программ для пользователя, работающего в данный момент с компьютером.
  • HKEY_USERS — при этом сведения для построения предыдущего раздела содержатся именно в этом корневом разделе. Раздел HKEY_USERS содержит в себе сведения о настройках оболочки Windows, применяемых для пользователя, впервые вошедшего в систему (в подразделе .DEFAULT данного корневого раздела), а также настройки для определенных классов пользователей и настройки для текущих пользователей системы. То есть, если в Windows 9x данный корневой раздел содержал сведения о настройках всех пользователей системы, то в Windows XP он содержит только настройки текущих пользователей, зарегистрированных в системе (но если войти в программу regedit.exe от имени другого пользователя, то данный корневой раздел будет содержать в себе настройки как пользователя, который сейчас зарегистрирован в системе, так и пользователя, от чьего имени был произведен запуск программы regedit.exe).
  • HKEY_LOCAL_MACHINE — если предыдущие два корневых раздела содержали в себе сведения о настройках определенных пользователей, то данный корневой раздел содержит информацию о настройках системы и программ, применяемые для всех пользователей системы.
  • HKEY_CURRENT_CONFIG — данный корневой раздел содержит в себе копию содержимого ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\HARDWARE PROFILES\CURRENT и создается для совместимости с предыдущими версиями операционной системы.

Как уже было сказано, правая панель редактора реестра содержит в себе сведения о содержащихся в открытой в данный момент ветви реестра параметрах: их названия, тип и значение. Параметры реестра в regedit.exe могут иметь следующие типы данных (имеется в виду, что редактор реестра может создавать данные типы параметров, на самом же деле типов параметров намного больше):

  • REG_SZ — строковой параметр, содержимым которого может быть строка символов Unicode;
  • REG_EXPAND_SZ — расширенный строковой параметр, содержимым которого может быть как произвольный текст, так и определенные переменные, которые после обработки системой преобразуются в статические пути к каталогам Windows (например, переменная %systemroot% преобразуется в каталог, в котором установлена текущая версия Windows, а переменная %username% преобразуется в имя текущего пользователя, работающего в системе);
  • REG_MULTI_SZ — мультистроковой параметр, содержимым которого может быть несколько строк текста, разграниченных ограничителем NULL;
  • REG_DWORD — если все предыдущие типы параметров содержали в себе строковые данные, то данный тип определяет числовое значение длиной не более 4 байт;
  • REG_BINARY — этот параметр содержит в себе набор данных любой длины, но в основном применяется длина в 4 байта (по аналогии с REG_DWORD);

В основном, нет никакой разницы между типами параметров реестра, поэтому вместо типа REG_DWORD можно создавать параметры типа REG_BINARY, вместо REG_SZ можно создавать параметры типа REG_EXPAND_SZ и т.д.

Битовая маска, это название способа описания значения параметров типа REG_DWORD и REG_BINARY, при котором отдельно описывается результат установки каждого бита данного параметра. Например, в данной книге можно встретить абзацы, в которых будет содержаться подобный текст:

  • 0х00000001 — описание1.
  • 0х00000002 — описание2.
  • 0х00000004 — описание3.
  • 0х00000008 — описание4.
  • 0х00000010 — описание5.
  • 0х00000020 — описание6.
  • ...

Приведенный абзац можно расшифровать так: если первый бит параметра будет установлен, то ОПИСАНИЕ1, если второй бит параметра будет установлен, тогда ОПИСАНИЕ2, если третий бит параметра установлен, тогда ОПИСАНИЕ3 и т.д.

При этом следует еще сказать, что в параметре может быть установлено сразу несколько битов, в этом случае выполняемое им действие определяется суммой соответствующих описаний. Битовая маска не только упрощает описание сложных параметров (по аналогии со способ их описания, мы эти параметры также будем называть битовыми масками), но и позволяет легко установить отдельные биты параметра. Например, чтобы установить все приведенные выше биты параметра, нужно записать в данный параметр значение, равное 1 + 2+4+8+10+20 = 7 + 38 = 3F (расчет ведется в шестнадцатеричной системе счисления).

А теперь давайте начнем рассматривать описание наиболее интересных параметров реестра. И первым корневым разделом, структуру которого мы рассмотрим, будет корневой раздел HKEY_CLASSES_ROOT. Хотя, если быть точным, содержимое этого раздела строится на основе двух ветвей других корневых разделов: HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES и HKEY_CURRENT_USER\SOFTWARE\CLASSES. Первая ветвь реестра содержит в себе информацию о расширениях файлов, используемую для построения карты расширений для всех пользователей компьютера. Вторая же ветвь реестра содержит в себе информацию о расширениях, которые либо используются только текущим пользователем, либо переопределяют собой информацию из ветви корневого раздела HKEY_LOCAL_MACHINE. То есть, если информация о каком-нибудь расширении содержится как в корневом разделе HKEY_LOCAL_MACHINE, так и в HKEY_CURRENT_USER, то сведения из этих ветвей будут объединяться. При этом сведения из ветви HKEY_CURRENT_USER будут заменять собой сведения из ветви HKEY_LOCAL_MACHINE.

Корнеевой раздел HKEY_CLASSES_ROOT имеет более-менее статичную структуру. Если остальные корневые разделы могут содержать в себе любую информацию, какую только захотят поместить в них программисты (любое название параметра и любой путь, ведущий к этому параметру), то данный корневой раздел содержит в себе параметры, названия которых не зависят от прихотей программистов, которые разрабатывали соответствующее расширение файла или ActiveX-объект.

Как уже говорилось выше, корневой раздел HKEY_CLASSES_ROOT содержит в себе всю информацию о расширениях файлов, которые зарегистрированы в вашей системе, а также описывает те действия, которые вы можете сделать с файлами данного расширения (команды контекстного меню). Также данная ветвь реестра содержит в себе сведения обо всех зарегистрированных в системе ActiveX-компонентах, но о них мы поговорим чуть позже, а сейчас давайте разберемся с хранением сведений о расширениях файлов.

Расширения файлов

Есть два способа хранения в реестре информации о расширении файлов — правильный и не очень. Второй из них применялся в старых версиях операционной системы Windows, хотя поддерживается и Windows XP. При его использовании все параметры и дочерние подразделы записываются в один раздел корневого раздела HKEY_CLASSES_ROOT. То есть, все то, что мы будет рассматривать далее в этой статье, при использовании неправильного способа хранения будет содержаться в одном подразделе корневого раздела HKEY_CLASSES_ROOT. Правильный же способ хранения параметров расширения файла определяет для их хранения два подраздела. Первый из подразделов назван в честь расширения файла, например, для файлов с расширением .txt он будет называться .TXT. Этот подраздел еще называют подразделом расширения. Он практически ничего интересного не содержит, но зато в параметре по умолчанию он содержит название второго раздела. Вот этот раздел реестра как раз и содержит в себе всю интересную и увлекательную информацию о расширении. Этот подраздел еще называется подразделом идентификатора.

Мы с вами будем рассматривать параметры и дочерние подразделы, используемые в регистрации расширения с помощью правильного способа. Но сначала давайте посмотрим на рисунок 2.01. Этот рисунок показывает правильный способ хранения информации для файлов с расширением .txt.

Рисунок 1 Рис. 2.01 Подразделы описания расширения файла

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

  • Content Type — значение данного параметра строкового типа определяет тип расширения MIME, который ассоциирован с файлами соответствующего расширения. Те, кто занимался web-программированием, конечно знают, что такое MIME. Именно строка MIME используется браузером для определения того, что же ему нужно делать с соответствующим расширением (то ли открыть, то ли воспроизвести, то ли еще что-нибудь сделать). На рисунке 2.01 видно, что текстовые файлы (.txt) используют расширение text/plain, которое определяет содержимое данных файлов как неформатированный текст.
  • PerceivedType — значение этого параметра строкового типа говорит системе о том, в каком виде хранится информация соответствующим расширением. Этот параметр может принимать такие значения: Text, Image, Audio, Video, System, Compressed.
  • Generic — еще один параметр строкового типа. Если его значение равно System, то файлы с соответствующим расширением являются собственностью системы. И удалять сведения о них лучше не стоит.
  • NoOpen — этот параметр строкового типа используется только в том случае, когда параметр по умолчанию подраздела расширения не имеет никакого значения. Если данный параметр присутствует, то при попытке открытия соответствующего файла перед отображением диалога Открыть с помощью… будет отображаться диалог Внимание…, в котором будет говориться о том, что файлы с данным расширением используются системой и их лучше не открывать.

Также данный подраздел может содержать в себе дочерние подразделы. Например, в нем может храниться подраздел SHELLNEW. Этот подраздел определяет команды в списке СОЗДАТЬ контекстного меню рабочего стола или проводника. То есть, если подраздел расширения содержит данный дочерний подраздел (при этом в нем должен находиться один из описанных ниже параметров), то в списке СОЗДАТЬ появится пункт, с помощью которого можно будет создать файл с соответствующим расширением.

Только что говорилось, что подраздел SHELLNEW должен содержать в себе определенный параметр. Этот параметр как раз и определяет, что именно система должна сделать после того, как пользователь выбрал соответствующую команду меню СОЗДАТЬ. Давайте рассмотрим эти параметры (внимание, в подразделе SHELLNEW должен находиться только один из этих параметров):

  • Command — значение данного параметра строкового типа определяет команду, которая будет выполняться при выборе соответствующего пункта меню Создать;
  • NullFile —а этот строковой параметр вообще не должен содержать в себе никакого значения (при этом, после выбора создания соответствующего расширения, будет создаваться пустой файл);
  • FileName — значение этого строкового параметра определяет путь и имя файла, который будет создаваться (просто копироваться в текущую папку) после выбора соответствующей команды меню Создать (при этом, если файл находится в каталоге, определяемом содержимым параметра строкового типа Templates, расположенного в ветви реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders, то достаточно присвоить параметру FileName только имя необходимого файла);
  • Data — и последний параметр (тип binary), он содержит в себе последовательность цифр в шестнадцатеричной системе счисления, которую система будет использовать для генерации содержимого файла (например, этот параметр используют файлы с музыкальным контекстом для возможности создания пустого файла-образца звука);

Давайте для примера попробуем создать свою собственную команду в списке СОЗДАТЬ. Поскольку большая часть данной книги посвящена описанию работы с сервером сценариев Windows, давайте опишем шаблон для быстрого создания основы скриптового файла .vbs. Для этого нужно воспользоваться ветвью реестра HKEY_CLASSES_ROOT\.VBS\SHELLNEW — создать в ней расширенный строковой параметр FILENAME (поскольку в шаблоне будут строки вызова объектов Windows, другие параметры данной ветви нам не подойдут), которому нужно присвоить путь к файлу шаблона. Например, присвоим данному параметру значение %systemroot%\WSHtemplate.vbs. А файл шаблона должен содержать следующие данные: set wshshell = WScript.CreateObject("WScript.Shell")

Пока что хватит и этого вызова — когда мы займемся непосредственно созданиями скриптов, мы модифицируем файл шаблона. Теперь присваиваем созданному нами файлу имя WSHtemplate.vbs и смотрим на результат (Рис.2.02).

Рисунок 2 Рис. 2.02 Создание команды меню Создать

Продолжение следует

Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=107

В избранное