Работа с Реестром ОС WindowsNT/2000/XP, страница 2

Динамический раздел. Он создается заново при каждой загрузке операционной системы. Вся его информация сохраняется в оперативной памяти.

Пары параметр-значение

Пара параметр-значение состоит из трех частей: имени параметра, значения параметра и типа данных, то есть типа значения. Пара параметр-значение обычно называется просто значение. Однако в этой книге мы будем использовать термин пара параметр-значение, поскольку он более точен и его труднее спутать с другими подобными терминами, чем просто значение — термин, который имеет множество разных смыслов. Пара параметр-значение — это компонент Реестра, который непосредственно хранит данные. Используя путь к разделу в качестве указателя места и имя параметра в качестве ссылки, вы можете считать значение из пары параметр-значение.

Типы данных

Значение, находящееся в паре параметр-значение, может иметь один из нескольких типов данных. Три основных типа данных это: двойное слово (DWORD), строка (string) и двоичное значение (binary). Существуют и другие, реже используемые типы данных. Это: двойное слово в формате big-endian, расширенная строка, символическая ссылка в формате Unicode, список ресурсов устройство-драйвер и массив строк. Применяется также неопределенный тип.

Тип данных DWORD позволяет сохранять двойные слова. DWORD — это число длиной в два слова или четыре байта. Оно не может быть отрицательным. Это единственный способ хранить числа в Реестре. Не существует эквивалентов числовым типам языка программирования С int, long или short.

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

Тип данных binary предназначен для хранения данных в двоичном формате. Он позволяет хранить информацию, которая не может быть сохранена в предыдущих типах данных. Это значит, что если вы не можете записать данные в виде строки или числа, вы можете занести их в Реестре в двоичном формате. Единственная проблема, с которой в этом случае вам придется столкнуться, заключается в том, что записанные данные вам придется читать также в двоичном формате.

Другие типы данных имеют весьма специфическое применение.

Если вы изучите документацию, вы обнаружите, что реестр способен содержать в себе данные многих экзотических типов (табл. 2). Однако на самом деле система никогда не обращает внимания на эти типы данных. Например, переменная типа REG_EXPAND_SZ — это строка, содержащая имена переменных окружения, которые необходимо заменить значениями этих переменных самостоятельно. Реестр не предоставляет вам доступ к значениям переменных окружения автоматически. Вместо этого вы должны получить необходимые значения собственными силами, например, при помощи функции ExpandEnvironmentStrings.

Однако существуют исключения. Например, в Windows 95 и Windows 98 в  конец строки REG_SZ будет автоматически добавлен замыкающий ноль, если вы забыли это сделать. Вместе с тем некоторые версии Windows 2000 и NT не будут добавлять ноль. Ни одна система не будет добавлять ноль в конец строк REG_MULTI_SZ или REG_EXPAND_SZ.

Таблица 2. Типы данных, хранящихся в реестре

Тип

Описание

REG_BINARY                                

Бинарные данные в любой форме

REG_DWORD

32-битное число (часто используется для хранения байта, слова или даже бита)

REG_DWORD_LITTLE_ENDIAN      

32-битное число в формате аппаратных платформ Intel

REG_DWORD_BIG_ENDIAN            

32-битное число в формате аппаратных платформ Motorola

REG_EXPAND_SZ                          

Строка, завершающаяся нулем, содержащая ссылки на переменные окружения (например: "%РАТН%")

REG_LINK                                     

Символическая ссылка в формате UNICODE

REG_MULTI_SZ                             

Массив строк, каждая из которых завершается нулем. В конце массива располагаются два нулевых символа

REG_NONE                                    

Неопределенный тип

REG_RESOURCE_LIST                   

Список ресурсов драйвера устройства

REG_SZ                                        

Строка, завершающаяся нулем