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 例程的 NtXxx 和 ZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 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) |