NtOpenFile 函数 (ntifs.h)

NtOpenFile 例程打开现有文件、目录、设备或卷。

语法

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenFile(
  [out] PHANDLE            FileHandle,
  [in]  ACCESS_MASK        DesiredAccess,
  [in]  POBJECT_ATTRIBUTES ObjectAttributes,
  [out] PIO_STATUS_BLOCK   IoStatusBlock,
  [in]  ULONG              ShareAccess,
  [in]  ULONG              OpenOptions
);

参数

[out] FileHandle

指向接收文件句柄的 HANDLE 变量的指针。

[in] DesiredAccess

指定一个 ACCESS_MASK 值,该值确定对对象的请求访问权限。 有关详细信息,请参阅 NtCreateFileDesiredAccess 参数。

[in] ObjectAttributes

指向指定对象名称和其他属性 的OBJECT_ATTRIBUTES 结构的指针。 使用 InitializeObjectAttributes 初始化此结构。 如果调用方未在系统线程上下文中运行,则必须在调用 InitializeObjectAttributes 时设置OBJ_KERNEL_HANDLE属性。

[out] IoStatusBlock

指向 IO_STATUS_BLOCK结构的 指针,该结构接收最终完成状态和有关请求的操作的信息。

[in] ShareAccess

指定文件的共享访问类型。 有关详细信息,请参阅 NtCreateFileShareAccess 参数。

[in] OpenOptions

指定打开文件时要应用的选项。 有关详细信息,请参阅 NtCreateFileCreateOptions 参数。

返回值

NtOpenFile 返回STATUS_SUCCESS或相应的 NTSTATUS 错误代码。 在后一种情况下,调用方可以通过检查 IoStatusBlock 参数来查找有关失败原因的详细信息。

注解

NtOpenFile 提供调用方可用于操作文件数据或文件对象的状态和属性的句柄。 NtOpenFile 提供 NtCreateFile 提供的功能子集。 有关详细信息,请参阅 在驱动程序中使用文件

一旦 FileHandle 指向的句柄不再使用,驱动程序必须调用 ZwClose 将其关闭。

如果调用方未在系统线程上下文中运行,则必须确保创建的任何句柄都是专用句柄。 否则,可以通过运行驱动程序的上下文的进程访问句柄。 有关详细信息,请参阅 对象句柄

NtOpenFile 的调用方必须在 IRQL = PASSIVE_LEVEL且启用了特殊内核 APC 的情况下运行。

注意 如果在用户模式下调用此函数,则应使用名称“NtOpenFile”而不是“ZwOpenFile”。
 
对于内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxxZwXxx 版本在处理和解释输入参数的方式可能有所不同。 有关例程 的 NtXxxZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本

要求

   
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 ntifs.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (请参阅“备注”部分)
DDI 符合性规则 HwStorPortProhibitedDDIs,PowerIrpDDis

另请参阅

ACCESS_MASK

InitializeObjectAttributes

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

ZwCreateFile