基于 IRP 的 I/O 操作,遵循设备对象标志
以下基于 IRP 的 I/O 操作的缓冲方法由文件系统卷DEVICE_OBJECT结构的 Flags 成员的值确定:
IRP_MJ_DIRECTORY_CONTROL
IRP_MJ_QUERY_EA
IRP_MJ_QUERY_QUOTA
IRP_MJ_READ
IRP_MJ_SET_EA
IRP_MJ_SET_QUOTA
IRP_MJ_WRITE
Flags 成员中的DO_BUFFERED_IO和DO_DIRECT_IO标志如下所示:
如果设置了DO_BUFFERED_IO标志,则操作将使用缓冲 I/O。
如果设置了DO_DIRECT_IO标志且未设置DO_BUFFERED_IO标志,则操作将使用直接 I/O。
如果两个标志均未设置,则操作既不会使用缓冲 I/O,也不使用直接 I/O。
有关设备对象标志的详细信息,请参阅 DEVICE_OBJECT 和 初始化设备对象。
请注意,IRP_MJ_READ和IRP_MJ_WRITE可以是基于 IRP 的操作,也可以是快速 I/O 操作。 当它们基于 IRP 时,缓冲方法由如上所述的设备对象标志确定。 当这些操作是快速 I/O 时,它们始终不使用缓冲 I/O 和直接 I/O。 有关可基于 IRP 的 I/O 操作或快速 I/O 操作的详细信息,请参阅 可IRP-Based的操作或快速 I/O。