Condividi tramite


Funzione NtClose (ntifs.h)

La routine ntClose chiude un handle di oggetto.

Sintassi

__kernel_entry NTSYSCALLAPI NTSTATUS NtClose(
  [in] HANDLE Handle
);

Parametri

[in] Handle

Handle per un oggetto di qualsiasi tipo.

Valore restituito

NtClose restituisce STATUS_SUCCESS in caso di esito positivo o il codice di errore NTSTATUS appropriato, ad esempio il seguente.

Codice restituito Significato
STATUS_INVALID_HANDLE Handle non è un handle valido.
STATUS_HANDLE_NOT_CLOSABLE Il thread chiamante non dispone dell'autorizzazione per chiudere l'handle; ovvero, l'handle dell'oggetto specificato è protetto dalla chiusura da qualsiasi tentativo di istanza di NtClose.

Un esempio in cui il secondo codice NTSTATUS si verifica quando viene richiamata una chiamata di ZwDuplicateObject con OBJ_PROTECT_CLOSE passato all'argomento del parametro degli attributi handle. Il kernel garantisce che l'handle non possa essere chiuso in tal caso.

Osservazioni

NtClose è 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 aperto 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à 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à processore precedente, vedere ExGetPreviousMode.) Ad esempio, un handle che NtCreateKey torna a una routine DriverEntry non può essere successivamente 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 esegue la richiesta di I/O corrente o, per i driver di livello inferiore, in un contesto di thread arbitrario.

Un handle nonkernel può essere chiuso solo se viene soddisfatta una delle due condizioni: la modalità processore precedente è KernelModeoppure 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 NtClose 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 viene eseguita in modalità utente, è necessario usare il nome "NtClose" anziché "ZwClose".

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
client minimo supportato Windows 2000
piattaforma di destinazione Universale
intestazione ntifs.h (include Wdm.h, Ntddk.h, Ntifs.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL PASSIVE_LEVEL
regole di conformità DDI HwStorPortProhibitedDDIs, IrqlZwPassive, PowerIrpDDis, ZwRegistryCreate, ZwRegistryCreate(storport), ZwRegistryOpen, ZwRegistryOpen(storport)

Vedere anche

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection