Freigeben über


Registrierungs- Run-Time-Bibliotheksroutinen

Um Registrierungseinträge zu bearbeiten, können Treiber die Xxx-Routinen von RtlXxxRegistry aufrufen, die eine einfachere Schnittstelle als die ZwXxxKey-Routinen bieten. Dabei muss der Treiber keine Handles öffnen und schließen. Stattdessen verweist der Treiber auf Schlüssel anhand des Namens.

Sie übergeben die Parameter RelativeTo und Path an jede Xxx-Routine der RtlXxx-Registrierung. Wenn RelativeTo RTL_REGISTRY_ABSOLUTE ist, gibt Path den vollständigen Pfad des Schlüssels an, beginnend mit dem Stammverzeichnis \Registry . Wenn RelativeTo RTL_REGISTRY_HANDLE ist, ist Path tatsächlich ein geöffnetes Handle. Zusätzliche RTL_REGISTRY_XXX-Werte für RelativeTo geben Sie die Pfade der allgemeinen Stammwurzeln für den Schlüssel an. in diesen Fällen gibt Path den Pfad relativ zu diesem Stamm an. Beispielsweise erfordert RTL_REGISTRY_USER, dass Path relativ zu den Registrierungseinstellungen des aktuellen Benutzers sein muss. (Dieser Wert entspricht der Angabe HKEY_CURRENT_USER in einer Benutzermodusanwendung.) Eine Beschreibung aller RTL_REGISTRY_XXX-Werte finden Sie unter RtlCheckRegistryKey.

In der folgenden Tabelle sind die Vorgänge aufgeführt, die Treiber ausführen können, indem sie die Xxx-Routinen der RtlXxx-Registrierung aufrufen.

Vorgang RtlXxxRegistryXxx-Routine zum Aufrufen

Erstellen eines Registrierungsschlüssels

RtlCreateRegistryKey

Überprüfen, ob ein Registrierungsschlüssel vorhanden ist

RtlCheckRegistryKey

Untersuchen eines oder mehrerer Registrierungsschlüsselwerte

RtlQueryRegistryValues

Schreiben eines Registrierungsschlüsselwerts

RtlWriteRegistryValue

Löschen eines Registrierungsschlüsselwerts

RtlDeleteRegistryValue

Im folgenden Codebeispiel wird veranschaulicht, wie ValueName für \Registry\Machine\System\KeyName auf den ULONG-Wert 0xFF festgelegt wird. Vergleichen Sie dieses Beispiel mit dem entsprechenden im Abschnitt Registrierungsschlüsselobjektroutinen .

NTSTATUS status;
ULONG data = 0xFF;

status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
                               (PWCSTR)L"\\Registry\\Machine\\System\\KeyName",
                               (PWCSTR)L"ValueName",
                               REG_DWORD,
                               &data,
                               sizeof(ULONG));

Obwohl Sie weniger Codezeilen schreiben, wenn Sie die Xxx-Routinen der RtlXxx-Registrierung anstelle der Zw Xxx-Schlüsselroutinen verwenden, sind die letzteren zum Ausführen bestimmter Vorgänge erforderlich. Beispielsweise ist keine Xxx-Routine für rtlXxxRegistry vorhanden, die ZwEnumerateKey entspricht.

Wenn Sie mehrere Vorgänge für denselben Schlüssel ausführen, sind die ZwXxxKey-Routinen effizienter. Sie können für jeden Vorgang dasselbe geöffnete Handle verwenden. Im Gegensatz dazu öffnen und schließen die Xxx-Routinen der RtlXxxRegistry ein neues Handle für jeden Vorgang.