驅動程式的分派例程(請參閱 DRIVER_DISPATCH)分別處理具有 IRP_MJ_DEVICE_CONTROL 和 IRP_MJ_INTERNAL_DEVICE_CONTROL I/O 函式代碼的 IRP。
針對每個常見的周邊裝置類型,系統會定義一組 I/O 控制程式代碼,以 用於IRP_MJ_DEVICE_CONTROL 要求。 每種裝置類型的新驅動程式都必須支持這些要求。 在大部分情況下,每種裝置類型的這些公用 I/O 控制碼不會匯出至使用者模式應用程式。
其中一些系統定義的 I/O 控制程式代碼是由較高層級的驅動程式使用,這些驅動程式會呼叫 IoBuildDeviceIoControlRequest 來建立基礎設備驅動器的 IRP。 Win32 元件會使用其他元件來與基礎設備驅動器通訊,方法是呼叫 Win32 函式 DeviceIoControl (如 Microsoft Windows SDK 檔中所述),進而呼叫系統服務。 I/O 管理員會設定 IRP,並將主要函式程式代碼IRP_MJ_DEVICE_CONTROL和指定的 I/O 控件程式代碼儲存在 Parameters.DeviceIoControl.IoControlCode的 IO_STACK_LOCATION 結構中。 然後,I/O 管理員會呼叫鏈結中最高層級驅動程式的 DispatchDeviceControl 例程。
針對專為與新驅動程式互作及支援某些系統提供的驅動程式,作系統也會針對 IRP_MJ_INTERNAL_DEVICE_CONTROL 要求定義一組 I/O 控制碼。 在大部分情況下,這些公用 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) 的裝置特定參考區段。