Поделиться через


Процедуры библиотеки 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 для вызова

Создание раздела реестра

RtlCreateRegistryKey

Проверка наличия раздела реестра

RtlCheckRegistryKey

Изучение одного или нескольких значений раздела реестра

RtlQueryRegistryValues

Запись значения раздела реестра

RtlWriteRegistryValue

Удаление значения раздела реестра

RtlDeleteRegistryValue

В следующем примере кода показано, как присвоить параметру 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 открывают и закрывают новый дескриптор для каждой операции.