共用方式為


控制器物件簡介

如其名稱所示,控制器物件通常代表具有連結裝置的實體裝置控制器。 實體控制器協調之一組類似裝置的最低層級非 WDM 驅動程式可以建立控制器物件,並用它來同步處理連結裝置之間的 I/O 作業。 驅動程式會實作 ControllerControl 常式,並呼叫 I/O 管理員的控制器物件支援常式。

注意

WDM 驅動程式不支援使用控制器物件。

一般而言,如果下列準則保留,驅動程式會使用控制器物件來同步處理附加裝置的作業:

  • 控制器不會在中斷的情況下執行長時間作業,因此驅動程式不需要建立裝置專用線程或使用系統背景工作執行緒。

  • 連線到控制器的裝置很類似。 也就是說,它們不是具有完全不同實體屬性或操作功能的裝置,例如可連線到鍵盤和輔助裝置控制器的鍵盤和滑鼠裝置。

  • 驅動程式的設計訴求是整合型:與裝置控制器和連接的實體裝置相關的單層式,而不是設計為控制器的埠驅動程式 (,) 搭配一或多個類別驅動程式, (在埠驅動程式上階層式附加裝置) 。

具有 I/O 通道和一組邏輯裝置物件的裝置驅動程式也可以使用控制器物件,在這類裝置的通道之間或之間同步處理其 I/O 作業。

控制器物件沒有名稱,因此不是 I/O 要求的目標。 它只是一種同步處理機制,可從一組裝置物件序列化 I/O。 因為控制器物件沒有名稱,所以使用者模式受保護子系統看不到它,這無法在沒有取得代表目標裝置物件的檔案物件控制碼的情況下提出裝置 I/O 要求。 較高層級驅動程式也看不到控制器物件,無法將自己的裝置物件附加至控制器物件。 換句話說,I/O 管理員或較高層級的驅動程式都無法在控制器物件所代表的裝置上設定要求 I/O 的 IRP。 I/O 要求一律會發出給裝置物件。 只有驅動程式可以使用控制器物件。

同步處理和重迭 I/O

實體裝置的整合型驅動程式與「AT」磁碟控制卡等功能並不需要使用控制器物件來同步處理其裝置 I/O 作業。 例如,驅動程式寫入器可以嘗試類似下列同步處理技術,而不是使用控制器物件:

  • 設定具名裝置物件,以代表 I/O 要求的目標裝置。

  • 維護狀態資訊 (每個裝置擴充功能或單一裝置擴充功能中的一組裝置忙碌旗標,) 指出哪些裝置物件是目前 I/O 作業的目標。

  • 執行目前忙碌裝置物件的 I/O 作業,並重新佇列其他裝置物件的傳入 IRP,直到目前的 IRP 完成為止。

上述同步處理技術會序列化所有驅動程式目標裝置物件的 IRP 處理。 請注意,它也會強制驅動程式在 StartIo 常式開始處理下一個 IRP 之前完成目前的 IRP,這可惜地降低驅動程式效能。

如果某些裝置作業可以重迭,使用控制器物件可以增加驅動程式的 I/O 輸送量,因為此同步處理技術可讓驅動程式判斷它是否可以在設定實體裝置之前重迭作業。 例如,磁碟控制卡可能會讓驅動程式在某個磁片上重迭搜尋,並在另一個磁片上執行讀取/寫入作業。

此外,使用控制器物件是透過單一實體裝置同步處理多個目標裝置物件的 I/O 作業的相對簡單方式,例如「AT」 磁碟控制卡。 使用控制器物件可讓整合型驅動程式跨一組具名裝置物件同步處理 I/O 作業,而不需要維護一或多個裝置延伸模組中每個裝置和裝置控制器的狀態,而不需要重新佇列 IRP。

不過,某些設計來重迭 I/O 作業的裝置,例如全雙工序列控制器或匯流排主機介面卡,通常具有設定 IRP 內部佇列的驅動程式。