使用 Self-Managed I/O

大部分以架構為基礎的驅動程式會針對其支援的裝置利用架構的 PnP 和電源管理功能。 換句話說,大部分以架構為基礎的驅動程式會執行下列所有動作,讓架構管理裝置的 PnP 和電源狀態:

不過,一些架構型驅動程式需要更瞭解其裝置的狀態,包括下列情況下的驅動程式:

  • 驅動程式執行的作業不是由驅動程式從架構 I/O 佇列接收的一組 I/O 要求所決定。

  • 驅動程式會與較舊的非架構驅動程式通訊,並直接處理 WDM 介面。

  • 驅動程式收到的 I/O 要求無法分成兩個群組:需要裝置處於其工作狀態的群組,以及未接收的群組。

大部分的驅動程式不在上述其中一種情況中,但如果您的驅動程式是,可能需要更直接控制裝置的 PnP 和電源管理作業。 這類驅動程式可以使用 自我管理 I/O。 使用自我管理 I/O 表示驅動程式會透過一組回呼函式來通知 (,只要其裝置已插入或取消插入,以及每當裝置暫時停止時,就會) 。

請注意,驅動程式可以使用自我管理 I/O,並且仍使用架構的 I/O 佇列,做為電源管理的佇列。 例如,驅動程式可以使用架構的 I/O 佇列,而不是以電源管理,搭配一組自我管理的 I/O 回呼函式。

若要使用自我管理 I/O,驅動程式會在呼叫 WdfDeviceInitSetPnpPowerEventCallbacks時註冊一組額外的事件回呼函式。 這些事件回呼函式如下:

當裝置第一次進入其運作 (D0) 狀態時,架構會呼叫驅動程式的 EvtDeviceSelfManagedIoInit 回 呼函式。 每當使用者將裝置插入系統,每次重新開機系統時,就會發生這種情況。

在某些情況下,驅動程式必須停止裝置的 I/O 作業:裝置即將進入低電源狀態、即將移除,或已意外移除。 下列清單會詳細檢查這些情況:

如需架構呼叫驅動程式事件回呼函式順序的詳細資訊,請參閱 PnP 和電源管理案例

雖然很少需要,但架構可讓驅動程式存取 架構中的狀態機器,更能控制裝置的 PnP 和電源狀態。