Partager via


Fonction NtClose (ntifs.h)

La routine NtClose ferme un handle d’objet.

Syntaxe

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

Paramètres

[in] Handle

Gérer vers un objet de n’importe quel type.

Valeur de retour

NtClose retourne STATUS_SUCCESS en cas de réussite, ou le code d’erreur NTSTATUS approprié, tel que le suivant.

Retourner le code Signification
STATUS_INVALID_HANDLE Handle n’est pas un handle valide.
STATUS_HANDLE_NOT_CLOSABLE Le thread appelant n’est pas autorisé à fermer le handle ; autrement dit, le handle d’objet spécifié est protégé contre la fermeture de toute tentative d’instance de NtClose.

Par exemple, le dernier code NTSTATUS se produit lorsqu’un appel de ZwDuplicateObject a été appelé avec OBJ_PROTECT_CLOSE passé à l’argument de paramètre de handle attributes. Le noyau garantit que le handle ne peut pas être fermé dans ce cas.

Remarques

NtClose est une routine générique qui fonctionne sur n’importe quel type d’objet.

La fermeture d’un handle d’objet ouvert entraîne l’invalidation de ce handle. Le système décrémente également le nombre de handles de l’objet et vérifie si l’objet peut être supprimé. Le système ne supprime pas réellement l’objet tant que tous les handles de l’objet ne sont pas fermés et qu’aucun pointeur référencé n’est conservé.

Un pilote doit fermer chaque poignée qu’il ouvre dès que le handle n’est plus nécessaire. Les handles de noyau, qui sont ceux ouverts par un thread système ou en spécifiant l’indicateur de OBJ_KERNEL_HANDLE, ne peuvent être fermés que lorsque le mode processeur précédent est KernelMode. Cette exigence s’applique à la fois aux threads système et aux routines de répartition pour les IRPs qui ont été émises à partir du mode noyau. (Pour plus d’informations sur le mode processeur précédent, consultez ExGetPreviousMode.) Par exemple, un handle qui NtCreateKey retourne à une routine DriverEntry ne peut pas être fermé par la suite par les routines de répartition du même pilote. Un DriverEntry routine s’exécute dans un processus système, tandis que les routines de répartition s’exécutent généralement dans le contexte du thread qui émet la requête d’E/S actuelle, ou, pour les pilotes de niveau inférieur, dans un contexte de thread arbitraire.

Un handle nonkernel ne peut être fermé que si l’une des deux conditions est remplie : le mode processeur précédent est KernelMode, ou le thread appelant dispose d’une autorisation suffisante pour fermer le handle. Un exemple de ce dernier se produit lorsque le thread appelant est celui qui a créé le handle.

Les appelants de NtClose ne doivent pas supposer que cette routine attend automatiquement que toutes les E/S soient terminées avant de retourner.

Si l’appel à cette fonction se produit en mode utilisateur, vous devez utiliser le nom «NtClose» au lieu de «ZwClose».

Pour les appels à partir de pilotes en mode noyau, les versions NtXxx et ZwXxx d’une routine Windows Native System Services peuvent se comporter différemment de la façon dont elles gèrent et interprètent les paramètres d’entrée. Pour plus d’informations sur la relation entre les versions NtXxx et ZwXxx d’une routine, consultez Using Nt and Zw Versions of the Native System Services Routines.

Exigences

Exigence Valeur
client minimum pris en charge Windows 2000
plateforme cible Universel
d’en-tête ntifs.h (include Wdm.h, Ntddk.h, Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
règles de conformité DDI HwStorPortProhibitedDDIs, IrqlZwPassive, PowerIrpDDis, ZwRegistryCreate, ZwRegistryCreate(storport), ZwRegistryOpen, ZwRegistryOpen(storport)

Voir aussi

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection