打开现有文件、设备、目录或卷,并返回文件对象的句柄。
此函数等效于 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 中 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。 还可以使用 LoadLibrary 和 GetProcAddress 函数动态链接到 Ntdll.dll。
要求
| Requirement | 价值 |
|---|---|
| 目标平台 | Windows操作系统 |
| Header | winternl.h |
| Library | ntdll.lib |
| DLL | ntdll.dll |