NtOpenFile 函数 (winternl.h)

打开现有文件、设备、目录或卷,并返回文件对象的句柄。

此函数等效于 Windows 驱动程序工具包 (WDK) 中所述的 ZwOpenFile 函数。

语法

__kernel_entry 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

指向打开的文件句柄的指针。 一旦不再使用句柄,驱动程序必须使用 ZwClose 关闭该句柄。

[in] DesiredAccess

ACCESS_MASK值,该值表示调用方所需的文件访问类型。 有关可以指定的访问类型的信息,请参阅 WDK 中的 ZwCreateFile

[in] ObjectAttributes

指向调用方使用 InitializeObjectAttributes 初始化的 结构的指针。 如果调用方未在系统进程上下文中运行,则必须设置 ObjectAttributesOBJ_KERNEL_HANDLE 属性。 有关指定对象属性的详细信息,请参阅 WDK 中 ZwCreateFileCreateOptions 参数。

[out] IoStatusBlock

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

[in] ShareAccess

文件的共享访问类型。 有关详细信息,请参阅 WDK 中的 ZwCreateFile

[in] OpenOptions

打开文件时要应用的选项。 有关详细信息,请参阅 WDK 中的 ZwCreateFile

返回值

NtOpenFile 返回 STATUS_SUCCESS 或适当的错误状态。 如果返回错误状态,调用方可以通过检查 IoStatusBlock 来查找有关失败原因的其他信息。

注解

在系统进程以外的进程上下文中运行的驱动程序例程必须为 ZwOpenFileObjectAttributes 参数设置 OBJ_KERNEL_HANDLE 属性。 这会将 ZwOpenFile 返回的句柄的使用限制为仅在内核模式下运行的进程。 否则,运行驱动程序的上下文中的进程可以访问句柄。 驱动程序可以调用 InitializeObjectAttributes 来设置 OBJ_KERNEL_HANDLE 属性,如下所示。

InitializeObjectAttributes(&ObjectAddributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);

ZwCreateFile 的调用方必须在 IRQL = PASSIVE_LEVEL 运行。

请注意,WDK 头文件 Ntdef.h 对于许多常量定义以及 InitializeObjectAttributes 宏是必需的。 还可以使用 LoadLibraryGetProcAddress 函数动态链接到 Ntdll.dll。

要求

要求
目标平台 Windows
标头 winternl.h
Library ntdll.lib
DLL ntdll.dll