操作,可以是基于 IRP 的操作或快速的 I/O 操作

以下类型的操作可以是基于 IRP 的操作,也可以是快速 I/O 操作:

  • IRP_MJ_DEVICE_CONTROL。 (请注意,IRP_MJ_INTERNAL_DEVICE_CONTROL始终基于 IRP。)

  • IRP_MJ_QUERY_INFORMATION。 如果 FileInformationClass 参数为 FileBasicInformationFileStandardInformationFileNetworkOpenInformation,则此操作可以是快速 I/O。

  • IRP_MJ_READ。 微筛选器驱动程序可以在FLT_OPERATION_REGISTRATION结构中设置 FLTFL_OPERATION_REGISTRATION_SKIP_CACHED_IO 标志,以避免接收快速 I/O IRP_MJ_READ操作和基于 IRP 的缓存读取。

  • IRP_MJ_WRITE。 微筛选器驱动程序可以在FLT_OPERATION_REGISTRATION结构中设置FLTFL_OPERATION_REGISTRATION_SKIP_CACHED_IO标志,以避免接收快速 I/O IRP_MJ_WRITE操作和缓存的基于 IRP 的写入。

当其中任一操作是快速 I/O 操作时,它始终既不使用缓冲 I/O,也不使用直接 I/O,即使等效的基于 IRP 的操作使用不同的缓冲方法也是如此。

当IRP_MJ_DEVICE_CONTROL是快速 I/O 操作时,无论 IOCTL 的传输类型如何,它始终不使用缓冲 I/O 或直接 I/O。

尽管IRP_MJ_LOCK_CONTROL可以是基于 IRP 的 I/O 操作,也可以是快速 I/O 操作,但它没有缓冲区。