ZwClose, fonction (wdm.h)

La routine ZwClose ferme un handle d’objet.

Syntaxe

NTSYSAPI NTSTATUS ZwClose(
  [in] HANDLE Handle
);

Paramètres

[in] Handle

Gérez un objet de n’importe quel type.

Valeur retournée

ZwClose retourne STATUS_SUCCESS en cas de réussite, ou le code d’erreur NTSTATUS approprié en cas d’échec. En particulier, elle retourne STATUS_INVALID_HANDLE si Handle n’est pas un handle valide, ou STATUS_HANDLE_NOT_CLOSABLE si le thread appelant n’est pas autorisé à fermer le handle.

Remarques

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

La fermeture d’un handle d’objet ouvert rend ce handle non valide. Le système décrémente également le nombre de handles pour 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é ne reste.

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

Un handle non-noyau 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 a l’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 ZwClose ne doivent pas supposer que cette routine attend automatiquement que toutes les E/S se terminent avant de revenir.

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

Pour les appels provenant de pilotes en mode noyau, les versions NtXxx et ZwXxx d’une routine Windows Native System Services peuvent se comporter différemment dans 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.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

Voir aussi

Utilisation des versions Nt et Zw des routines des services système natifs

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection