Udostępnij przez


Rejestr Run-Time procedur biblioteki

Aby manipulować wpisami rejestru, sterowniki mogą wywoływać procedury RtlXxxRegistryXxx, które zapewniają prostszy interfejs niż procedury ZwXxxKey. W tym przypadku sterownik nie jest wymagany do otwierania i zamykania uchwytów; Zamiast tego sterownik odwołuje się do kluczy według nazwy.

Parametry RelativeTo i Path są przekazywane do każdej rutyny RtlXxxRegistryXxx. Jeśli RelativeTo jest RTL_REGISTRY_ABSOLUTE, Path określa pełną ścieżkę klucza, zaczynając od \Registry root. Jeśli RelativeTo jest RTL_REGISTRY_HANDLE, Path faktycznie jest otwartym dojściem. Dodatkowe wartości RTL_REGISTRY_XXX dla parametru RelativeTo określają ścieżki wspólnych katalogów głównych dla klucza; w takich przypadkach ścieżka określa ścieżkę względem tego katalogu głównego. Na przykład RTL_REGISTRY_USER wymaga, aby ścieżka jest względna względem ustawień rejestru bieżącego użytkownika. (Ta wartość jest równoważna określeniu HKEY_CURRENT_USER w aplikacji w trybie użytkownika). Aby uzyskać opis wszystkich wartości RTL_REGISTRY_XXX , zobacz RtlCheckRegistryKey.

W poniższej tabeli wymieniono operacje, które sterowniki mogą wykonywać, wywołując procedury RtlXxx RegistryXxx.

Operacja RtlXxxRegistryXxx procedura do wywołania

Tworzenie klucza rejestru

RtlCreateRegistryKey

Sprawdzanie, czy istnieje klucz rejestru

RtlCheckRegistryKey

Sprawdzanie co najmniej jednej wartości klucza rejestru

RtlQueryRegistryValues

Zapisywanie wartości klucza rejestru

RtlWriteRegistryValue

Usuwanie wartości klucza rejestru

RtlDeleteRegistryValue

Poniższy przykład kodu ilustruje, jak ustawić wartość ValueName dla \Registry\Machine\System\KeyName na wartość ULONG 0xFF. Porównaj ten przykład z odpowiadającym mu przykładem w sekcji Procedury obsługi obiektu klucza rejestru.

NTSTATUS status;
ULONG data = 0xFF;

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

Mimo że piszesz mniej wierszy kodu podczas korzystania z procedur rejestru RtlXxx zamiast procedur ZwXxxKey, te ostatnie są niezbędne do wykonywania niektórych operacji. Na przykład nie istnieje procedury RtlXxxRegistryXxx , która odpowiada ZwEnumerateKey.

W przypadku wykonywania wielu operacji na tym samym kluczu procedury ZwXxxKey są bardziej wydajne — można użyć tego samego otwartego uchwytu dla każdej operacji. Z kolei procedury RtlXxxRegistryXxx otwierają i zamykają nowy uchwyt dla każdej operacji.