打开文件的句柄

若要打开文件的句柄,请执行以下步骤:

  1. 创建 OBJECT_ATTRIBUTES 结构,并调用 InitializeObjectAttributes 宏来初始化结构。 将文件的对象名称指定为 InitializeObjectAttributesObjectName 参数。

  2. 通过将 OBJECT_ATTRIBUTES 结构传递给 IoCreateFileZwCreateFileZwOpenFile,打开文件的句柄。

    如果文件不存在, IoCreateFileZwCreateFile 将创建该文件,而 ZwOpenFile 将返回STATUS_OBJECT_NAME_NOT_FOUND。

请注意,驱动程序几乎始终使用 ZwCreateFileZwOpenFile ,而不是 IoCreateFile

调用 IoCreateFileZwCreateFileZwOpenFile 时,Windows 主管会创建一个新的文件对象来表示文件,并为对象提供一个打开的句柄。 此文件对象将一直保留,直到你关闭所有打开的句柄。

无论调用哪个例程,都必须传递所需的访问权限作为 DesiredAccess 参数。 这些权限必须涵盖驱动程序将执行的所有操作。 下表列出了这些操作以及请求的相应访问权限。

Operation 所需的访问权限

从文件中读取。

FILE_READ_DATA或GENERIC_READ

向文件写入数据。

FILE_WRITE_DATA或GENERIC_WRITE

仅写入文件末尾。

FILE_APPEND_DATA

读取文件的元数据,例如文件的创建时间。

FILE_READ_ATTRIBUTES或GENERIC_READ

写入文件的元数据,例如文件的创建时间。

FILE_WRITE_ATTRIBUTES或GENERIC_WRITE

有关 可用于 DesiredAccess 的值的详细信息,请参阅 ZwCreateFile