基于 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。

有关设备对象标志的详细信息,请参阅 DEVICE_OBJECT初始化设备对象

请注意,IRP_MJ_READ 和 IRP_MJ_WRITE 可以是基于 IRP 的操作,也可以是快速 i/o 操作。 如果它们基于 IRP,则缓冲方法由设备对象标志确定,如上所述。 当这些操作是快速 i/o 时,它们始终不使用缓冲和直接 i/o。 有关可以是基于 IRP 或快速 i/o 操作的 i/o 操作的详细信息,请参阅 可 IRP-Based 或快速I/o 的操作。