打开文件的句柄
若要打开文件的句柄,请执行以下步骤:
创建 OBJECT_ATTRIBUTES 结构,并调用 InitializeObjectAttributes 宏来初始化结构。 将文件的对象名称指定为 InitializeObjectAttributes 的 ObjectName 参数。
通过将 OBJECT_ATTRIBUTES 结构传递给 IoCreateFile、 ZwCreateFile 或 ZwOpenFile,打开文件的句柄。
如果文件不存在, IoCreateFile 和 ZwCreateFile 将创建该文件,而 ZwOpenFile 将返回STATUS_OBJECT_NAME_NOT_FOUND。
请注意,驱动程序几乎始终使用 ZwCreateFile 或 ZwOpenFile ,而不是 IoCreateFile。
调用 IoCreateFile、 ZwCreateFile 或 ZwOpenFile 时,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。