Condividi tramite


Funzione ZwCreateKey (wdm.h)

La routine ZwCreateKey crea una nuova chiave del Registro di sistema o ne apre una esistente.

Sintassi

NTSYSAPI NTSTATUS ZwCreateKey(
  [out]           PHANDLE            KeyHandle,
  [in]            ACCESS_MASK        DesiredAccess,
  [in]            POBJECT_ATTRIBUTES ObjectAttributes,
                  ULONG              TitleIndex,
  [in, optional]  PUNICODE_STRING    Class,
  [in]            ULONG              CreateOptions,
  [out, optional] PULONG             Disposition
);

Parametri

[out] KeyHandle

Puntatore a una variabile HANDLE che riceve un handle per la chiave.

[in] DesiredAccess

Specifica un valore ACCESS_MASK che determina l'accesso richiesto all'oggetto. Oltre ai diritti di accesso definiti per tutti i tipi di oggetti (vedere ACCESS_MASK), il chiamante può specificare uno o più dei diritti di accesso seguenti, specifici per le directory degli oggetti:

flag di DesiredAccess Consente al chiamante di eseguire questa operazione
KEY_QUERY_VALUE Leggere i valori di chiave.
KEY_SET_VALUE Scrivere valori di chiave.
KEY_CREATE_SUB_KEY Creare sottochiavi per la chiave.
KEY_ENUMERATE_SUB_KEYS Leggere le sottochiavi della chiave.
KEY_CREATE_LINK Creare un collegamento simbolico alla chiave. Questo flag non viene usato dai driver intermedi e del dispositivo.
KEY_NOTIFY Chiedere di ricevere una notifica quando il nome, il valore o gli attributi della chiave cambiano. Per altre informazioni, vedere ZwNotifyChangeKey.

Il chiamante può anche specificare una delle costanti seguenti, che combina diversi flag ACCESS_MASK.

Costante È costituito da questi flag ACCESS_MASK
KEY_READ STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS e KEY_NOTIFY
KEY_WRITE STANDARD_RIGHTS_WRITE, KEY_SET_VALUE e KEY_CREATE_SUB_KEY
KEY_EXECUTE Uguale a KEY_READ.
KEY_ALL_ACCESS STANDARD_RIGHTS_ALL, KEY_QUERY_VALUE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY e KEY_CREATE_LINK

[in] ObjectAttributes

Puntatore a una struttura OBJECT_ATTRIBUTES che specifica il nome dell'oggetto e altri attributi. Usare InitializeObjectAttributes per inizializzare questa struttura. Se il chiamante non è in esecuzione in un contesto di thread di sistema, deve impostare l'attributo OBJ_KERNEL_HANDLE quando chiama InitializeObjectAttributes.

TitleIndex

I driver intermedi e del dispositivo impostano questo parametro su zero.

[in, optional] Class

Puntatore a una stringa Unicode che contiene la classe oggetto della chiave. Queste informazioni vengono usate da Configuration Manager.

[in] CreateOptions

Specifica le opzioni da applicare durante la creazione o l'apertura di una chiave, specificate come combinazione compatibile dei flag seguenti.

flag CreateOptions Descrizione
REG_OPTION_VOLATILE La chiave non viene mantenuta al riavvio del sistema.
REG_OPTION_NON_VOLATILE La chiave viene mantenuta al riavvio del sistema.
REG_OPTION_CREATE_LINK La chiave appena creata è un collegamento simbolico. Questo flag non viene usato dai driver intermedi e del dispositivo.
REG_OPTION_BACKUP_RESTORE La chiave deve essere creata o aperta con privilegi speciali che consentono operazioni di backup e ripristino. Questo flag non viene usato dai driver intermedi e del dispositivo.

[out, optional] Disposition

Puntatore a una variabile che riceve un valore che indica se è stata creata una nuova chiave o se ne è stata aperta una esistente.

valore eliminazione Descrizione
REG_CREATED_NEW_KEY È stata creata una nuova chiave.
REG_OPENED_EXISTING_KEY È stata aperta una chiave esistente.

Valore restituito

ZwCreateKey restituisce STATUS_SUCCESS in caso di esito positivo o il codice di errore NTSTATUS appropriato in caso di errore.

Osservazioni

ZwCreateKey fornisce un handle che il chiamante può usare per modificare una chiave del Registro di sistema. Per altre informazioni, vedere Uso del Registro di sistema in un driver.

Quando l'handle a cui punta KeyHandle non è più in uso, il driver deve chiamare ZwClose per chiuderlo.

Esistono due modi alternativi per specificare il nome del file da creare o aprire con ZwCreateKey:

  1. Come percorso completo, fornito nel membro ObjectName dell'input ObjectAttributes. I nomi dei percorsi delle chiavi del Registro di sistema iniziano con \Registry.

  2. Come pathname relativo a un'altra chiave del Registro di sistema, rappresentata dall'handle nel rootDirectory membro dell'input ObjectAttributes.

Se la chiave specificata da ObjectAttributes non esiste, la routine tenta di creare la chiave. Per questo tentativo di esito positivo, la nuova chiave deve essere una sottochiave diretta della chiave a cui fa riferimento RootDirectorye la chiave a cui rootDirectory fa riferimento deve essere stata aperta per KEY_CREATE_SUB_KEY accesso.

Se la chiave specificata esiste già, viene aperta e il relativo valore non viene influenzato in alcun modo.

Gli attributi di sicurezza specificati da ObjectAttributes quando viene creata una chiave determinano se il DesiredAccess specificato viene concesso alle chiamate successive a ZwCreateKey e ZwOpenKey.

Se il chiamante non è in esecuzione in un contesto di thread di sistema, deve assicurarsi che gli handle creati siano handle privati. In caso contrario, l'handle può essere accessibile dal processo nel cui contesto è in esecuzione il driver. Per altre informazioni, vedere Handle di oggetti .

Per altre informazioni sull'uso delle chiavi del Registro di sistema, vedere Uso del Registro di sistema in un driver.

Se la chiamata a questa funzione viene eseguita in modalità utente, è necessario usare il nome "NtCreateKey" anziché "ZwCreateKey".

La routine NtCreateKey nel kernel di Windows non è direttamente accessibile ai driver in modalità kernel.

Per le chiamate da driver in modalità kernel, le NtXxx e ZwXxx versioni di una routine di Windows Native System Services possono comportarsi in modo diverso nel modo in cui gestiscono e interpretano i parametri di input. Per altre informazioni sulla relazione tra le versioni NtXxx e ZwXxx di una routine, vedere Using Nt and Zw Versions of the Native System Services Routines.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL PASSIVE_LEVEL
regole di conformità DDI HwStorPortProhibitedDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(wdm)

Vedere anche

ACCESS_MASK

InitializeObjectAttributes

uso di versioni Nt e Zw delle routine di Servizi di sistema nativi

ZwClose

ZwDeleteKey

ZwEnumerateKey

ZwEnumerateValueKey

ZwFlushKey

ZwNotifyChangeKey

ZwOpenKey

ZwQueryValueKey

ZwSetValueKey