可一次傳輸大量數據的裝置驅動程式應針對這些傳輸使用直接 I/O。 針對大型傳輸使用直接 I/O 可改善驅動程式的效能,兩者都是藉由減少中斷負荷,以及消除緩衝 I/O 中固有的記憶體配置和複製作業。
一般而言,大量儲存設備驅動器會要求直接 I/O 進行傳輸要求,包括使用直接記憶體存取 (DMA) 或程式化 I/O (PIO) 的最低層級驅動程式,以及連結在上面的任何中繼驅動程式。
I/O 管理員會根據以下所示來判斷一個 I/O 操作是否使用直接 I/O:
針對IRP_MJ_READ和IRP_MJ_WRITE要求,DO_DIRECT_IO是在 DEVICE_OBJECT 結構的 Flags 成員中設定。 如需詳細資訊,請參閱 初始化裝置物件。
對於 IRP_MJ_DEVICE_CONTROL 和 IRP_MJ_INTERNAL_DEVICE_CONTROL 要求,IOCTL 程式代碼的值會包含METHOD_IN_DIRECT或METHOD_OUT_DIRECT作為 IOCTL 值中的 TransferType 值。 如需詳細資訊,請參閱 定義 I/O 控制程式碼。
使用直接 I/O 的驅動程式有時會使用緩衝 I/O 來處理某些 IRP。 特別是,驅動程式通常會針對一些需要數據傳輸的 IRP_MJ_DEVICE_CONTROL I/O 控制代碼使用緩衝 I/O,不論驅動程式是否在讀取和寫入作業中使用直接 I/O。
視使用 DMA 或 PIO 而定,設定直接 I/O 傳輸會稍有不同。 如需詳細資訊,請參閱:
驅動程式必須採取步驟,在 DMA 和 PIO 傳輸期間維護快取一致性。 如需詳細資訊,請參閱 維護快取一致性。