ZwOpenFile
ZwOpenFile 例程打开一个已经存在的file, directory, device, or volume.
Syntax
C++
NTSTATUS ZwOpenFile(
_Out_ PHANDLE FileHandle,
_In_ ACCESS_MASK DesiredAccess,
_In_ POBJECT_ATTRIBUTES ObjectAttributes,
_Out_ PIO_STATUS_BLOCK IoStatusBlock,
_In_ ULONG ShareAccess,
_In_ ULONG OpenOptions
);
Parameters
FileHandle [out]
指向一个HANDLE 的指针,用于保存打开的句柄。
DesiredAccess [in]
指定一个 ACCESS_MASK 值,希望打开目标后的访问方式。更多信息见 ZwCreateFile 的DesiredAccess参数。
ObjectAttributes [in]
OBJECT_ATTRIBUTES 结构体指针,指定对象名和其他的属性,使用例程InitializeObjectAttributes 初始化这个结构体. 如果调用者不在一个系统线程的上下文中, 当调用InitializeObjectAttributes时必须设置结构体的OBJ_KERNEL_HANDLE 属性
IoStatusBlock [out]
一个IO_STATUS_BLOCK 的指针用于存放完成后的状态和操作的相关信息。
ShareAccess [in]
文件的共享访问设定. 更多信息见ZwCreateFile的ShareAccess参数。
OpenOptions [in]
打开文件时应用的选项,更多信息见ZwCreateFile的CreateOptions参数。
Return value
ZwOpenFile 返回 STATUS_SUCCESS 或者一个合适的NTSTATUS error code. 在返回error code的情况下, 调用者可以通过检查IoStatusBlock 参数来获取更多失败信息。
Remarks
ZwOpenFile 提供了一个句柄,通过它可以操作一个文件的数据或者是文件状态,或是文件的属性。ZwOpenFile 提供了ZwCreateFile的一个功能子集(ZwCreateFile能做更多事). 详见文章: Using Files in a Driver.
一旦不在使用此文件, 驱动必须调用 ZwClose 关闭它。
如果调用者不在系统线程的上下文中。必须保证它创建的句柄时私有的。否则这个句柄能被所有调用该驱动功能的进程使用。详见文章:Object Handles.
Callers of ZwOpenFile must be running at IRQL = PASSIVE_LEVEL and with special kernel APCs enabled.
Note 如在用户模式下使用,用 "NtOpenFile" 代替"ZwOpenFile".