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 初始化的 结构的指针。 如果调用方未在系统进程上下文中运行,则必须设置 ObjectAttributes 的 OBJ_KERNEL_HANDLE 属性。 有关指定对象属性的详细信息,请参阅 WDK 中 ZwCreateFile 的 CreateOptions 参数。
[out] IoStatusBlock
指向 结构的指针,该结构包含有关请求的操作和最终完成状态的信息。
[in] ShareAccess
文件的共享访问类型。 有关详细信息,请参阅 WDK 中的 ZwCreateFile 。
[in] OpenOptions
打开文件时要应用的选项。 有关详细信息,请参阅 WDK 中的 ZwCreateFile 。
返回值
NtOpenFile 返回 STATUS_SUCCESS 或适当的错误状态。 如果返回错误状态,调用方可以通过检查 IoStatusBlock 来查找有关失败原因的其他信息。
注解
在系统进程以外的进程上下文中运行的驱动程序例程必须为 ZwOpenFile 的 ObjectAttributes 参数设置 OBJ_KERNEL_HANDLE 属性。 这会将 ZwOpenFile 返回的句柄的使用限制为仅在内核模式下运行的进程。 否则,运行驱动程序的上下文中的进程可以访问句柄。 驱动程序可以调用 InitializeObjectAttributes 来设置 OBJ_KERNEL_HANDLE 属性,如下所示。
InitializeObjectAttributes(&ObjectAddributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
ZwCreateFile 的调用方必须在 IRQL = PASSIVE_LEVEL 运行。
请注意,WDK 头文件 Ntdef.h 对于许多常量定义以及 InitializeObjectAttributes 宏是必需的。 还可以使用 LoadLibrary 和 GetProcAddress 函数动态链接到 Ntdll.dll。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | winternl.h |
Library | ntdll.lib |
DLL | ntdll.dll |