zwClose 函数 (wdm.h)

ZwClose 例程关闭对象句柄。

语法

NTSYSAPI NTSTATUS ZwClose(
  [in] HANDLE Handle
);

参数

[in] Handle

任何类型的对象的句柄。

返回值

ZwClose 在成功时返回STATUS_SUCCESS,或在失败时返回相应的 NTSTATUS 错误代码。 具体而言,如果 Handle 不是有效的句柄,则返回STATUS_INVALID_HANDLE;如果调用线程没有关闭句柄的权限,则返回STATUS_HANDLE_NOT_CLOSABLE。

注解

ZwClose 是一个泛型例程,可对任何类型的对象进行操作。

关闭打开的对象句柄会导致该句柄无效。 系统还会递减对象的句柄计数,并检查是否可以删除该对象。 在关闭对象的所有句柄且未保留引用的指针之前,系统不会实际删除对象。

一旦不再需要该句柄,驱动程序必须立即关闭它打开的每个句柄。 仅当以前的处理器模式为 KernelMode 时,内核句柄(即由系统线程或指定OBJ_KERNEL_HANDLE标志打开的内核句柄)才能关闭。 此要求既适用于系统线程,也适用于从内核模式发出的 IRP 的调度例程。 (有关以前的处理器模式的详细信息,请参阅 ExGetPreviousMode.) 例如, ZwCreateKey 返回到 DriverEntry 例程的句柄随后无法由同一驱动程序的 调度例程关闭。 DriverEntry 例程在系统进程中运行,而调度例程通常在发出当前 I/O 请求的线程上下文中运行,或者对于较低级别的驱动程序,在任意线程上下文中运行。

仅当满足以下两个条件之一时,才能关闭非内核句柄:以前的处理器模式为 KernelMode,或者调用线程有足够的权限关闭句柄。 当调用线程是创建句柄的线程时,会出现后者的示例。

ZwClose 的调用方不应假定此例程在返回之前自动等待所有 I/O 完成。

如果在用户模式下调用此函数,则应使用名称“NtClose”而不是“ZwClose”。

对于来自内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxxZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxxZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本

要求

要求
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlZwPassive (wdm) PowerIrpDDis (wdm) ZwRegistryCreate (storport) 、ZwRegistryCreate (storport) , ZwRegistryCreate (wdm) ZwRegistryOpen (storport) 、ZwRegistryOpen (storport) 、 ZwRegistryOpen (wdm)

另请参阅

使用本机系统服务例程的 Nt 和 Zw 版本

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection