IRP 主要函式代碼

每個IRP的每個驅動程式特定 I/O 堆疊位置 (IO_STACK_LOCATION) 都包含主要函式程式碼 (IRP_MJ_XXX) ,這會告訴驅動程式應該執行的作業,或基礎裝置驅動程式應該執行的作業以滿足 I/O 要求。 每個核心模式驅動程式都必須為它必須支援的主要函式程式碼提供分派常式。

驅動程式針對指定IRP_MJ_XXX程式碼執行的特定作業會相依于基礎裝置,特別是針對IRP_MJ_DEVICE_CONTROLIRP_MJ_INTERNAL_DEVICE_CONTROL要求。 例如,傳送至鍵盤驅動程式的要求與傳送至磁片驅動程式的要求一定有些不同。 不過,I/O 管理員會為每個系統定義的主要函式程式碼定義參數和 I/O 堆疊位置內容。

每個較高層級的驅動程式都必須針對下一個較低層級驅動程式在 IRP 中設定適當的 I/O 堆疊位置,並呼叫 IoCallDriver,不論是使用每個輸入 IRP,還是透過驅動程式建立的 IRP (,如果較高層級驅動程式保留輸入 IRP) 。 因此,每個中繼驅動程式都必須為每個基礎設備磁碟機處理的主要函式程式碼提供分派常式。 否則,每當應用程式或更高層級的驅動程式嘗試將 I/O 要求向下傳送至基礎設備磁碟機時,新的中繼驅動程式將會「中斷鏈結」。

檔案系統驅動程式和舊版檔案系統篩選驅動程式也會處理系統定義IRP_MJ_XXX函式程式碼的必要子集,有些則具有次級IRP_MN_XXX函式代碼。 如需如何處理這些 IRP 的詳細資訊,請參閱 檔案系統驅動程式和舊版 FS 篩選器驅動程式的 IRP 主要函式代碼

驅動程式會處理使用下列部分或所有主要函式程式碼設定的 IRP:

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IRP_MJ_DEVICE_CONTROL

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_INTERNAL_DEVICE_CONTROL

IRP_MJ_PNP

IRP_MJ_POWER

IRP_MJ_QUERY_INFORMATION

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_SHUTDOWN

IRP_MJ_SYSTEM_CONTROL

IRP_MJ_WRITE

本節所述的輸入和輸出參數是 IRP 中的函式特定參數。

如需 IRP 的詳細資訊,請參閱 處理 IRP