Главная страницаОбратная связьКарта сайта

Что нужно знать для работы с реестром?


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

Помимо известной нам со школы десятичной системы счисления существуют также двоичная, использующая только две цифры — 0 и 1, восьмеричная (цифры от 0 до 7) и шестнадцатеричная. В реестре Windows активно используются только две: десятичная и шестнадцатеричная. С первой системой мы все знакомы, тогда как вторая, вероятно, нуждается в некоторых пояснениях.

В десятичной системе используются десять цифр: от 0 до 9, поэтому она и называется десятичной. Если вы не прогуливали уроки математики в школе, то должны знать, что любое N-значное десятичное число можно представить следующим образом:

А = А, х 10N + А2 х 10N2 + ... + AN x 10°.

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

А = А, х BN- + А2 х BN2 + ... + An х В°,

где В (от base) — это основа системы счисления. В случае с десятичной системой В = 10.

Например, число 123 можно представить так:

453 = 4 х 10: + 5 х 101 + 3 х 10°= 4 х 100 + 5 х 10 + 3 х 1 = 400 + 50 + 3 = 453.

Теперь поговорим о шестнадцатеричной системе. В этой системе шестнадцать цифр:

0, 1, 2, 3, 4, 5. 6. 7, 8, 9, А, В, С, D, E, F.

Цифры А, В, С, D, Е и F соответствуют числам 10, 11, 12, 13, 14 и 15 десятичной системы.

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

А х 16 + F х 16°- 10 х 16 + 15 = 175.

Проверку можно выполнить при помощи обычного калькулятора Windows, для запуска которого выполните команду Вид, Инженерный. Установите переключатель системы счисления в положение Hex (шестнадцатеричная), с помощью кнопок калькулятора или клавиш клавиатуры введите число AF, после чего установите переключатель системы в положение Dec (десятичная). В результате выполненных действий получаем 175 (рис. 1.1).


Рис. 1.1: Использование калькулятора для выполнения вычислений в шестнадцатеричной системе

Шестнадцатеричные числа часто записываются так: Охчисло. Например, запись 0x77 означает, что число 77 записано в шестнадцатеричной системе. Очевидно, что оно не равно числу 77 в десятичной системе: после преобразования 0x77 в десятичную систему получим число 119.

Иногда для указания того, что число записано в шестнадцатеричной системе, вместо префикса Ох добавляют суффикс h: 77h.

Рассмотрим теперь порядок следования байтов в шестнадцатеричном числе. Для числа OxAlFF OxAl — это старший байт, a OxFF — младший байт. Левый байт называется старшим, поскольку вы умножаете его цифры на более высокие степени 16.

Одни программы хранят числа в прямом порядке байтов (в англоязычной литературе он называется Little-Endian), а другие — в обратном порядке (Big-Endian). Если используется обратный порядок, то первыми сохраняются старшие байты, а потом — младшие. Предположим, что нам нужно сохранить в памяти число 0x010203. Если используется обратный порядок записи байтов, оно будет сохранено в памяти таким образом:

0x010x02 0x03

Очень удобно с точки зрения обычного человека, однако процессоры фирмы Intel, например, работают с прямым порядком следования байтов, в котором сначала сохраняются младшие байты, а потом — старшие. Следовательно, наше число 0x010203 будет сохранено в памяти так:

0x03 0x02 0x01

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

1.3.2. Идентификаторы безопасности

Уникальное имя какого-нибудь объекта называется идентификатором. С помощью идентификаторов можно однозначно выделить объект из массы ему подобных. Например, идентификатором может быть имя пользователя. Зная имя пользователя, например, Денис (в данном случае строка Денис — идентификатор), вы сможете произвести операции именно с этим пользователем, выделив его из числа других пользователей системы.

В Windows имена пользователей, компьютеров сети, групп пользователей и других объектов подчиняются правилам безопасности. Для однозначного определения этих правил используются идентификаторы безопасности — SED (Security Identifier).

При каждом создании правила безопасности Windows генерирует SID. Локальные SID (локальные идентификаторы, относящиеся только к этому компьютеру) генерируются локальными средствами защиты (LSA, Local Security Authority) и хранятся в локальной базе данных.

Кроме локальных средств защиты, есть еще средства защиты домена (Domain Security Authority). DSA генерируют идентификаторы безопасности для домена и сохраняют их не в локальной базе данных, а в Active Directory (службе каталогов) на контроллере домена сети.

Понятно, что локальные SID уникальны в пределах компьютера (в пределах локальной базы данных), a SED домена уникальны в пределах домена (базы данных Active Directory). Понятно также, что локальные SED на разных компьютерах сети могут совпадать, так же как в разных доменах могут быть одинаковые SED домена.

SID никогда не повторяются. Предположим, в системе зарегистрирован пользователь Денис. Его учетной записи будет сопоставлен какой-то SED. Если вы удалите эту учетную запись, а затем создадите новую учетную запись с таким же именем, то SID у этой учетной записи будет другой.

К учетной записи в Windows можно обратиться как по ее имени, так и по SID, поскольку SID однозначно идентифицирует учетную запись. Но обраищться по SED к учетной записи крайне неудобно, поскольку выражения SID достаточно громоздки:

S-1-5-21-2052111302-436374069-1343024091-1003

Очевидно, намного проще запомнить имя Den, чем приведенный SID, однако формат SID все равно нужно знать. SID всегда начинается с буквы S, после которой следует номер версии SID, обычно 1. Далее обычно стоит число 5, что означает систему NT (NT authority). Все последующие числа (21-2052111302-436374069-1343024091) являются идентификатором домена, а последнее число (1003) — идентификатором группы пользователя.

Помимо персональных учетных записей пользователей в Windows есть постоянные или короткие SED: они одинаковы на всех компьютерах. Знать эти SID просто необходимо, поскольку они часто встречаются в реестре. В табл. 1.1 приведен список данных SED.

Таблица 1.1. Постоянные SID


Таблица 1.1 (окончание)



1.3.3. Глобальные идентификаторы

Полное название глобальных идентификаторов — глобальные уникальные идентификаторы (Global Unique Identifier, GUID). GUID — это число, однозначно идентифицирующее какой-либо объект: компьютер, другое устройство, программный компонент. GUID жестко привязывается к объекту: имя объекта можно изменить, a GUID нет. GUID очень похожи на SID, но выполняют несколько другую роль: GUID никак не связаны с безопасностью и правами доступа.

Формат GUID, в отличие от формата SID, одинаковый для всех объектов. GUID — это 16-байтное шестнадцатеричное число, разбитое на группы из 8, 4, 4, 4 и 12 шестнадцатеричных цифр. Каждая групп разделена дефисами, а весь GUID заключен в фигурные скобки, например:

{645FF040-5081-101B-9FO8-O0AA002F954E}

Данный GUID соответствует объекту Корзина. Вот еще несколько важных GUID:

□      {20D04FE0-3AEA-1069-A2D8-O8002B30309D} — .Мой компьютер;

□      {450D8FBA-AD25-11D0-98A8-0800361B1103} — Мои документы;

□      {208D2C60-3AEA-1069-A2D7-08002B30309D} —Сетевое окружение.

Примеры других GUID вы можете найти по адресу:

http:/Av\vw.mypluginsanfo/guids/component_programming.php?guid=00.

Для создания GUID используется утилита guidgen.exe. Microsoft гарантирует, что сгенерированный GUID будет уникальным в пределах системы. Прочитать о том, как использовать guidgen.exe, можно по адресу:

http://msdn2.niicrosoft.com/en-us/Iibran7ms24] 442(VS.80).aspx.

 Битовые маски

Сейчас вам придется вспомнить школьный курс информатики. Как мы знаем, один символ — это один байт. Таким образом, слово байт занимает 4 байта (4 символа). В одном байте восемь битов, каждый из которых может принимать значение 0 или 1.

Пойдем дальше. Возьмем любой символ, например, 1. В ASCII-таблице этому символу соответствует код 49. Переведем 49 в двоичную систему и получим вот такое число:

0011 0001

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

0000 011J

Первые четыре бита не используются, остальные, очевидно, используются для каких-то настроек: 0 — функция выключена, а 1 — включена. Хранить настройки в виде одного байта очень экономно: если нам нужно хранить четыре параметра, которые могут принимать только значения 0 или 1, то намного проще хранить их в виде одного байта. Такое решение позволяет экономить до 7 байтов (при условии, что используются все восемь параметров).

Но есть небольшая проблема. Наше число 0111 будет просто отображаться как число 7. Как же установить определенный бит нашего байта с настройками? Можно, конечно, преобразовать число 7 в двоичную систему, получить число 0000 0111, затем установить какой-то бит этого числа, а новое число (пусть это будет 1000 0111) преобразовать обратно в десятичную систему (получится 135) и записать его в реестр. Но, согласитесь, это не очень удобно.

Намного проще использовать битовые маски, позволяющие выделить из байта бит, соответствующий маске. Разряды двоичного числа нумеруются справа иачево (см. рис. 1.2).



Рис. 1.2. Порядок нумерации разрядов

В верхней части таблицы, представленной на рис. 1.2, изображено наше число (135), а в нижней части — номера разрядов. Как видите, разряды нумеруются начиная с нуля справа налево.

Битовая маска определяет, какой бит нужно установить (1) или, наоборот, снять. В этой книге вы можете встретить инструкцию, которая требует с помощью битовой маски 0x80 установить значение бита в 0. Битовая маска 0x80 соответствует седьмому биту. Если мы сбросим этот бит, то наше число превратится обратно в число 7 (0000 0111).

В табл. 1.2 приведены битовые маски для байта.




Таблица 1.2. Битовые маски


 Кодировки

В знакогенераторы первых персональных компьютеров была загружена кодировка ASCII (American Standard Code,for Information Interchange). В этой кодировке один символ занимал один байт (8 битов), следовательно, максимально возможное число символов для этой кодировки было ограничено 256-ю.

Кодировка ASCII содержала специальные (управляющие) символы, цифры, символы пунктуации, символы латиницы, псевдографические символы, а также специальные символы некоторых европейских языков. Понятно, что 256 знакомест не позволяло использовать символы всех европейских языков. Отечественные программисты разрабатывали русификаторы, загружающие в знакогенератор символы русского алфавита, перезаписывая уже существующие там символы.

Международная организация по стандартизации (ISO) разработала кодировку ISO Latin-1, которая несколько расширила ASCII, убрав из нее неиспользуемые символы и добавив некоторые национальные символы. Microsoft переработала Latin-] и назвала ее ANSI. Но ANSI по-прежнему была 8-битной кодировкой, поэтому ограничение в 256 символов не было снято.

Тогда компании Apple, ШМ и Microsoft создали некоммерческий консорциум, целью которого было создание универсальной кодировки, которая смогла бы содержать символы всех языков мира. Такой кодировкой стала Unicode, которая поддерживает 65 536 уникальных символов (один символ в этой кодировке занимает 16 битов). Такого количества знакомест хватило не только для представления символов всех используемых в мире алфавитов, но и для различных математических, географических символов, символов забытых языков (санскрит) и др.

Unicode является родной кодировкой для Windows XP/Vista, но XP/Vista по-прежнему поддерживает ANSI для совместимости с предыдущими версиями Windows. Имена объектов, файлов, каталогов, вся внутренняя информация Windows XP/Vista представлена в Unicode.


Обсудить статью на форуме


Если прочитаная статья из нашей обширной энциклопедия компьютера - "Что нужно знать для работы с реестром?", оказалась полезной или интересной, Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

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


Copyright © 2008 - 2017 Дискета.info