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 |
|
Überprüfen, ob ein Registrierungsschlüssel vorhanden ist |
|
Untersuchen eines oder mehrerer Registrierungsschlüsselwerte |
|
Schreiben eines Registrierungsschlüsselwerts |
|
Löschen eines Registrierungsschlüsselwerts |
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.