DispatchDeviceControl 和 DispatchInternalDeviceControl 常式
驅動程式的分派常式 (分別看到 DRIVER_DISPATCH) 處理 I/O 函式代碼為 IRP_MJ_DEVICE_CONTROL 和 IRP_MJ_INTERNAL_DEVICE_CONTROL的 IRP。
針對每個常見的周邊裝置類型,系統會針對 IRP_MJ_DEVICE_CONTROL 要求定義一組 I/O 控制程式碼。 每種裝置類型的新驅動程式都必須支援這些要求。 在大部分情況下,每種裝置類型的這些公用 I/O 控制程式碼不會匯出至使用者模式應用程式。
這些系統定義的部分 I/O 控制程式碼是由較高層級的驅動程式使用,這些驅動程式會藉由呼叫 IoBuildDeviceIoControlRequest來建立基礎設備磁碟機的 IRP。 Win32 元件會使用其他元件來與基礎裝置驅動程式通訊,方法是呼叫 Win32 函式DeviceIoControl (如Microsoft Windows SDK檔所述,) 接著呼叫系統服務。 I/O 管理員會設定 IRP,並將主要函式程式碼儲存在Parameters.DeviceIoControl.IoControlCodeIO_STACK_LOCATION結構中IRP_MJ_DEVICE_CONTROL和指定的 I/O 控制項程式碼。 然後,I/O 管理員會呼叫鏈結中最高層級驅動程式的 DispatchDeviceControl 常式。
針對專為與新驅動程式互通及支援新驅動程式所設計的特定系統提供的驅動程式,作業系統也會定義一組 I/O 控制程式碼,以用於 IRP_MJ_INTERNAL_DEVICE_CONTROL 要求。 在大部分情況下,這些公用 I/O 控制程式碼允許附加元件較高層級的驅動程式與基礎設備磁碟機交互操作。
例如,系統提供的平行驅動程式支援一組內部 I/O 控制代碼,廠商提供的驅動程式會在 IRP_MJ_INTERNAL_DEVICE_CONTROL 要求中傳送。 如需詳細資訊,請參閱 平行埠的內部裝置控制要求 和 平行裝置的內部裝置控制要求。
幾乎所有透過系統定義 I/O 控制程式碼要求的作業都會使用緩衝 I/O,因為這種類型的要求很少需要傳輸大量資料。 也就是說,即使是針對直接 I/O 設定其裝置物件的驅動程式,也會傳送 IRP,讓裝置控制要求在 Irp-AssociatedIrp.SystemBuffer > (,除了具有緊密結合 Win32 多媒體驅動程式的特定類型,) 。
此外,驅動程式也可以定義一組私人 I/O 控制程式碼,讓其他驅動程式可用來與其通訊。 新的公用 I/O 控制程式碼只能與 Microsoft Corporation 合作新增至系統,因為公用 I/O 控制程式碼內建于作業系統本身。
如需不同驅動程式類型必須支援及定義私人 I/O 控制程式碼之公用 I/O 控制項代碼集的特定資訊,請參閱 Windows 驅動程式套件 (WDK) 的裝置特定參考區段。