Función ZwClose (wdm.h)

La rutina ZwClose cierra un identificador de objeto.

Sintaxis

NTSYSAPI NTSTATUS ZwClose(
  [in] HANDLE Handle
);

Parámetros

[in] Handle

Controlar en un objeto de cualquier tipo.

Valor devuelto

ZwClose devuelve STATUS_SUCCESS correctamente o el código de error NTSTATUS adecuado en caso de error. En concreto, devuelve STATUS_INVALID_HANDLE si Handle no es un identificador válido o STATUS_HANDLE_NOT_CLOSABLE si el subproceso que realiza la llamada no tiene permiso para cerrar el identificador.

Comentarios

ZwClose es una rutina genérica que funciona en cualquier tipo de objeto.

Cerrar un identificador de objeto abierto hace que ese identificador no sea válido. El sistema también disminuye el número de identificadores del objeto y comprueba si se puede eliminar el objeto. El sistema no elimina realmente el objeto hasta que se cierran todos los identificadores del objeto y no quedan punteros a los que se hace referencia.

Un controlador debe cerrar todos los identificadores que se abran en cuanto el identificador ya no sea necesario. Los identificadores de kernel, que son los abiertos por un subproceso del sistema o especificando la marca de OBJ_KERNEL_HANDLE, solo se pueden cerrar cuando el modo de procesador anterior es KernelMode. Este requisito se aplica tanto a los subprocesos del sistema como a las rutinas de envío para los IRP emitidos desde el modo kernel. (Para obtener más información sobre el modo de procesador anterior, vea ExGetPreviousMode). Por ejemplo, un identificador que ZwCreateKey devuelve a una rutina DriverEntry no se puede cerrar posteriormente mediante las rutinas de distribución del mismo controlador. Una rutina DriverEntry se ejecuta en un proceso del sistema, mientras que las rutinas de distribución normalmente se ejecutan en el contexto del subproceso que emite la solicitud de E/S actual o, para los controladores de nivel inferior, en un contexto arbitrario de subprocesos.

Solo se puede cerrar un identificador que no sea kernel si se cumple una de estas dos condiciones: el modo de procesador anterior es KernelMode o el subproceso de llamada tiene permiso suficiente para cerrar el identificador. Un ejemplo de este último se produce cuando el subproceso que realiza la llamada es el que creó el identificador.

Los autores de llamadas de ZwClose no deben suponer que esta rutina espera automáticamente a que se completen todas las E/S antes de devolver.

Si la llamada a esta función se produce en modo de usuario, debe usar el nombre "NtClose" en lugar de "ZwClose".

En el caso de las llamadas desde controladores en modo kernel, las versiones NtXxx y ZwXxx de una rutina de Servicios del sistema nativo de Windows se pueden comportar de forma diferente en la forma en que controlan e interpretan los parámetros de entrada. Para obtener más información sobre la relación entre las versiones NtXxx y ZwXxx de una rutina, vea Using Nt and Zw Versions of the Native System Services Routines.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

Consulte también

Uso de las versiones Nt y Zw de las rutinas nativas de Servicios del sistema

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection