Программирование драйверов Windows


Функции RtlXxx прямого доступа к Системному Реестру


RtlCheckRegistryKey возвращает STATUS_SUCCESS в том случае, если указанный вложенный подраздел существует внутри подраздела, описанного первым параметром вызова. Первый параметр указывается как одно из значений RTL_REGISTRY_Xxx. Например, раздел \Registry\Machine\System\CurrentControlSet\Services описывается значением RTL_REGISTRY_SERVICES, а раздел \Registry\User\CurrentUser описывается значением RTL_REGISTRY_USER (см. заголовочные файлы ntddk.h или wdm.h).

RtlCreateRegistryKey создает подраздел внутри подраздела Реестра, указанного вторым параметром, который работает так же, как и в описанной выше функции RtlCheckRegistryKey.

RtlQueryRegistryValues позволяет одним вызовом получить значения нескольких параметров из всего поддерева указанного подраздела Реестра. При обнаружении требуемого параметра происходит вызов callback процедуры QueryRoutine, предоставляемой драйвером. Тем не менее, во всем многообразии примеров DDK нет ни одного случая использования этого вызова с callback процедурой QueryRoutine. На практике, вызов RtlQueryRegistryValues выполняется с первым параметром, имеющим в своем составе флаг RTL_QUERY_REGISTRY_DIRECT, при котором callback процедура не используется.

RtlWriteRegistryValue производит запись значения параметра Системного Реестра. Попутно может быть создан один вложенный подраздел, см. пример ниже.

UNICODE_STRING newParameterUnicodeTextValue; RtlInitUnicodeString( &newParameterUnicodeTextValue, L"Example text parameter 1");

NTSTATUS status = RtlWriteRegistryValue( RTL_REGISTRY_SERVICES, L"Example1\\InnerKey", L"NewParameter", // можно даже L"Вложенный Раздел" REG_SZ, newParameterUnicodeTextValue.Buffer, sizeof(WCHAR)*( wcslen(newParameterUnicodeTextValue.Buffer)+1) ); if ( !NT_SUCCESS( status ) ) { #if DBG DbgPrint("RtlWriteRegistryValue call is unsuccessful."); #endif }

Первый параметр RTL_REGISTRY_SERVICES указывает на то, что действия будут выполняться в разделе \Registry\Machine\System\CurrentControlSet\Services, или, в общепринятых терминах, HKLM\SYSTEM\CurrentControlSet\Services.


Начало  Назад  Вперед