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) |