Condividi tramite


Funzione ZwClose (wdm.h)

La routine ZwClose chiude un handle di oggetto.

Sintassi

NTSYSAPI NTSTATUS ZwClose(
  [in] HANDLE Handle
);

Parametri

[in] Handle

Handle per un oggetto di qualsiasi tipo.

Valore restituito

ZwClose restituisce STATUS_SUCCESS in caso di esito positivo o il codice di errore NTSTATUS appropriato in caso di errore. In particolare, restituisce STATUS_INVALID_HANDLE se Handle non è un handle valido o STATUS_HANDLE_NOT_CLOSABLE se il thread chiamante non dispone dell'autorizzazione per chiudere l'handle.

Commenti

ZwClose è una routine generica che opera su qualsiasi tipo di oggetto.

Se si chiude un handle di oggetto aperto, l'handle diventa non valido. Il sistema decrementa anche il numero di handle per l'oggetto e controlla se l'oggetto può essere eliminato. Il sistema non elimina effettivamente l'oggetto finché tutti gli handle dell'oggetto non vengono chiusi e non rimangono puntatori a cui si fa riferimento.

Un driver deve chiudere ogni handle che si apre non appena l'handle non è più necessario. Gli handle del kernel, ovvero quelli aperti da un thread di sistema o specificando il flag di OBJ_KERNEL_HANDLE, possono essere chiusi solo quando la modalità del processore precedente è KernelMode. Questo requisito si applica sia ai thread di sistema che alle routine di invio per i runtime di integrazione rilasciati dalla modalità kernel. Per altre informazioni sulla modalità del processore precedente, vedere ExGetPreviousMode. Ad esempio, un handle restituito da ZwCreateKey a una routine DriverEntry non può successivamente essere chiuso dalle routine di invio dello stesso driver. Una routine DriverEntry viene eseguita in un processo di sistema, mentre le routine dispatch vengono in genere eseguite nel contesto del thread che emette la richiesta di I/O corrente o, per i driver di livello inferiore, in un contesto thread arbitrario.

Un handle non kernel può essere chiuso solo se viene soddisfatta una di due condizioni: la modalità del processore precedente è KernelMode o il thread chiamante dispone di autorizzazioni sufficienti per chiudere l'handle. Un esempio di quest'ultimo si verifica quando il thread chiamante è quello che ha creato l'handle.

I chiamanti di ZwClose non devono presupporre che questa routine attenda automaticamente il completamento di tutte le operazioni di I/O prima della restituzione.

Se la chiamata a questa funzione si verifica in modalità utente, è necessario usare il nome "NtClose" anziché "ZwClose".

Per le chiamate da driver in modalità kernel, le versioni NtXxx e ZwXxx di una routine di Servizi di sistema nativi di Windows 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 .For more information about the Nt Xxx and Zw versions of the Native System Services Routines.

Requisiti

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 HwStorPortProhibitedDDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

Vedi anche

Uso delle versioni Nt e Zw delle routine native di Servizi di sistema

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection