Routine di libreria del Registro di sistema Run-Time
Per modificare le voci del Registro di sistema, i driver possono chiamare le routine RtlXxxRegistroXxx, che forniscono un'interfaccia più semplice rispetto alle routine Zw XxxKey. Quando si esegue questa operazione, il driver non è necessario aprire e chiudere i handle; il driver fa invece riferimento alle chiavi in base al nome.
Si passano i parametri RelativeTo e Path a ogni routine Rtl XxxRegistryXxx. Se RelativeTo è RTL_REGISTRY_ABSOLUTE, Path specifica il percorso completo della chiave, a partire dalla radice del Registro di sistema . Se RelativeTo è RTL_REGISTRY_HANDLE, Il percorso è effettivamente un handle aperto. Altri valori RTL_REGISTRY_XXX per RelativeTo specificano i percorsi delle radici comuni per la chiave; in questi casi, Path specifica il percorso relativo a tale radice. Ad esempio, RTL_REGISTRY_USER richiede che Path sia relativo alle impostazioni del Registro di sistema dell'utente corrente. Questo valore equivale a specificare HKEY_CURRENT_USER in un'applicazione in modalità utente. Per una descrizione di tutti i valori RTL_REGISTRY_XXX , vedere RtlCheckRegistryKey.
Nella tabella seguente sono elencate le operazioni che i driver possono eseguire chiamando le routine Rtl Xxx RegistryXxx.
Operazione | RoutineRtl Xxx RegistroXxxda chiamare |
---|---|
Creare una chiave del Registro di sistema |
|
Verificare se esiste una chiave del Registro di sistema |
|
Esaminare uno o più valori chiave del Registro di sistema |
|
Scrivere un valore chiave del Registro di sistema |
|
Eliminare un valore chiave del Registro di sistema |
Nell'esempio di codice seguente viene illustrato come impostare ValueName per \Registry\Machine\System\KeyName su un valore ULONG di 0xFF. Confrontare questo esempio con quello corrispondente nella sezione Routine dell'oggetto chiave del Registro di sistema .
NTSTATUS status;
ULONG data = 0xFF;
status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
(PWCSTR)L"\\Registry\\Machine\\System\\KeyName",
(PWCSTR)L"ValueName",
REG_DWORD,
&data,
sizeof(ULONG));
Anche se si scrivono meno righe di codice quando si usano le routine RtlXxxRegistroXxx anziché le routine Zw XxxKey, queste ultime sono necessarie per eseguire determinate operazioni. Ad esempio, non esiste alcuna routine RtlXxxRegistryXxx corrispondente a ZwEnumerateKey.
Se si eseguono più operazioni sulla stessa chiave, le routine Zw XxxKey sono più efficienti, è possibile usare lo stesso handle aperto per ogni operazione. Al contrario, le routine RtlXxxRegistroXxx aprono e chiudino un nuovo handle per ogni operazione.