NtOpenFile 函数 (winternl.h)

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

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

Syntax

__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 初始化的结构的指针。 如果调用方未在系统进程上下文中运行,则必须为 ObjectAttributes 设置OBJ_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。 还可以使用 LoadLibraryGetProcAddress 函数动态链接到 Ntdll.dll。

要求

Requirement 价值
目标平台 Windows操作系统
Header winternl.h
Library ntdll.lib
DLL ntdll.dll