Процедуры библиотеки Run-Time реестра
Для управления записями реестра драйверы могут вызывать подпрограммы RtlXxxRegistryXxx , которые предоставляют более простой интерфейс, чем подпрограммы ZwXxxKey . При этом драйверу не требуется открывать и закрывать дескрипторы; Вместо этого драйвер ссылается на ключи по имени.
Параметры RelativeTo и Path передаются каждой подпрограмме RtlXxxRegistryXxx . Если параметр RelativeTo имеет значение RTL_REGISTRY_ABSOLUTE, path указывает полный путь к разделу, начиная с корневого каталога \Registry . Если параметр RelativeTo имеет значение RTL_REGISTRY_HANDLE, path фактически является открытым дескриптором. Дополнительные значения RTL_REGISTRY_XXX для RelativeTo указать пути общих корней для ключа; в таких случаях path указывает путь относительно этого корня. Например, RTL_REGISTRY_USER требует, чтобы путь был относительно параметров реестра текущего пользователя. (Это значение эквивалентно указанию HKEY_CURRENT_USER в приложении пользовательского режима.) Описание всех значений RTL_REGISTRY_XXX см. в разделе RtlCheckRegistryKey.
В следующей таблице перечислены операции, которые могут выполнять драйверы, вызывая подпрограммы RtlXxxRegistryXxx .
Операция | Подпрограмма RtlXxxRegistryXxx для вызова |
---|---|
Создание раздела реестра |
|
Проверка наличия раздела реестра |
|
Изучение одного или нескольких значений раздела реестра |
|
Запись значения раздела реестра |
|
Удаление значения раздела реестра |
В следующем примере кода показано, как присвоить параметру ValueName для параметра \Registry\Machine\System\KeyName значение ULONG 0xFF. Сравните этот пример с соответствующим в разделе Подпрограммы объекта раздела реестра .
NTSTATUS status;
ULONG data = 0xFF;
status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
(PWCSTR)L"\\Registry\\Machine\\System\\KeyName",
(PWCSTR)L"ValueName",
REG_DWORD,
&data,
sizeof(ULONG));
Хотя при использовании подпрограмм RtlXxxRegistryXxx вместо подпрограмм ZwXxxKey пишется меньше строк кода, последние необходимы для выполнения определенных операций. Например, не существует подпрограммы RtlXxxRegistryXxx , соответствующей ZwEnumerateKey.
При выполнении нескольких операций с одним ключом подпрограммы ZwXxxKey будут более эффективными— вы можете использовать один и тот же открытый дескриптор для каждой операции. В отличие от этого, подпрограммы RtlXxxRegistryXxx открывают и закрывают новый дескриптор для каждой операции.