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