共用方式為


控制器對象簡介

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

備註

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

一般而言,如果下列準則保留,驅動程式會使用控制器對象將作業同步處理至連結的裝置:

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

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

  • 驅動程式被設計成單一結構:在裝置控制器與連接的實體裝置中是單層式,而不是設計為埠驅動程式(用於控制器),再將一或多個類別驅動程式(用於連接裝置)層疊於埠驅動程式上。

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

控制器對象沒有名稱,因此不是 I/O 要求的目標。 這只是用於將一組裝置物件的 I/O 串行化的一種同步機制。 因為控制器對象沒有名稱,所以使用者模式保護的子系統看不到此物件,因此在未取得代表目標裝置對象的檔案物件句柄的情況下,無法提出裝置 I/O 要求。 較高層級驅動程式也看不到控制器對象,無法將自己的裝置物件附加至控制器物件。 換句話說,I/O 管理員或更高層級驅動程式都不能在控制器物件所代表的裝置上設定要求 I/O 的 IRP。 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 設定內部佇列的驅動程式。