IRP_MJ_READ

將資料從裝置傳輸至系統的每個裝置驅動程式都必須處理 DispatchRead 或DispatchReadWrite常式中的讀取要求,因為任何高於這類裝置驅動程式的較高層級驅動程式都必須處理。

傳送時

在成功完成建立要求之後,隨時執行。

可能是使用者模式應用程式或 Win32 元件,其中包含代表目標裝置物件之檔案物件的控制碼,要求從裝置傳輸資料。 可能的話,較高層級的驅動程式已建立並設定讀取 IRP。

輸入參數

IRP 中的驅動程式 I/O 堆疊位置會指出在 Parameters.Read.Length傳輸多少位元組。

某些驅動程式會使用 Parameters.Read.Key 的值,將傳入的讀取要求排序為裝置佇列或驅動程式管理的 IRP 內部佇列中的驅動程式決定順序。

某些類型的驅動程式也會使用 Parameters.Read.ByteOffset的值,這表示傳輸作業的起始位移。 例如,請參閱可安裝檔案系統 (IFS) 檔中的 IRP_MJ_READ 主題。

輸出參數

根據基礎設備磁碟機是否使用 DO_BUFFERED_IO 或 DO_DIRECT_IO 設定目標裝置物件的 旗標 ,資料會傳輸到下列其中一項:

  • 如果驅動程式使用緩衝 I/O,則位於 Irp-AssociatedIrp.SystemBuffer > 的緩衝區。

  • 如果基礎設備磁碟機使用直接 I/O (DMA 或 PIO) , 則 Irp-MdlAddress > 上的 MDL 所描述的緩衝區。

作業

在收到讀取要求時,較高層級的驅動程式會在下一個較低驅動程式的 IRP 中設定 I/O 堆疊位置,或為一或多個較低驅動程式建立並設定額外的 IRP。 它可以藉由呼叫IoSetCompletionRoutine來設定其IoCompletion常式,這是輸入 IRP 的選擇性常式,但驅動程式建立的 IRP 是必要的。 然後,驅動程式會使用 IoCallDriver將要求傳遞給下一個較低的驅動程式。

收到讀取要求時,設備磁碟機會將資料從其裝置傳輸到系統記憶體。 裝置驅動程式會將 I/O 狀態欄塊的 [資訊 ] 欄位設定為完成 IRP 時所傳輸的位元組數目。

規格需求

標頭

Wdm.h (包括 Wdm.h、Ntddk.h 或 Ntifs.h)

另請參閱

DispatchRead

DispatchReadWrite

IoCallDriver

IoSetCompletionRoutine