使用 Power-Managed i/o 佇列
當驅動程式建立 i/o 佇列時,它可以指定佇列是否受 電源管理。 當 i/o 要求可在電源管理的佇列中使用時,此架構只會在裝置處於正常運作的 (D0) 狀態時,才會將要求傳遞至驅動程式。 此架構不允許裝置離開其工作狀態,直到架構從電源管理的佇列傳遞至驅動程式的所有 i/o 要求都已完成、取消或延遲為止。
如需電源管理 i/o 佇列的詳細資訊,請參閱 I/o 佇列的電源管理。
Power-Managed 佇列的回呼函數
如果您的驅動程式使用電源管理的 i/o 佇列,它可以提供兩個額外的回呼函式:
EvtIoStop
EvtIoStop回呼函數會停止處理指定的 i/o 要求。 當裝置離開其運作 (D0) 狀態或已移除時,架構會針對驅動程式尚未完成的每個 i/o 要求呼叫 i/o 佇列的EvtIoStop回呼函式一次,包括驅動程式所擁有的要求,以及它已轉送至 i/o 目標的要求。
EvtIoResume
EvtIoResume回呼函式會繼續處理先前停止的 i/o 要求。 當裝置回到其工作狀態之後,架構會呼叫 i/o 佇列的 EvtIoResume 回呼函式,以從佇列繼續傳遞 i/o 要求至驅動程式。
每次架構呼叫驅動程式的 EvtIoStop 回呼函式時,函式通常會 完成 或 取消 i/o 要求,或呼叫 WdfRequestStopAcknowledge 來將要求的擁有權傳回至架構。
雖然這是選擇性的,但一般而言,您應該針對電源管理的佇列提供 EvtIoStop 回呼函數。 藉由提供 EvtIoStop,您的驅動程式可協助縮短裝置(可能是系統)進入低電源狀態之前所經過的時間。
如果您未針對電源管理的佇列提供 EvtIoStop ,則架構會等到從電源管理佇列傳遞至驅動程式的所有要求都已完成,然後才能將裝置 (或系統) 移至較低的電源狀態或移除裝置。 這個停滯可能會導致系統無法進入休眠狀態或其他低系統電源狀態。 在極端情況下,它可能會導致系統在錯誤檢查代碼9F 中損毀。
如果您的驅動程式未將要求轉送至 i/o 目標,且未在不定時間保留要求,您可以放心地省略電源管理佇列的 EvtIoStop 。
正在等候發送器物件
一般而言,驅動程式應該只在 nonarbitrary 執行緒內容中使用發送器物件作為同步處理機制。
因為 要求處理常式 是在任意執行緒內容中執行,所以電源管理佇列的要求處理常式不能等待核心發送器物件的設定。 這樣做可能會導致鎖死。
如需有關驅動程式何時可以等候發送器物件的詳細資訊,以及當它無法使用時該怎麼辦的詳細資訊,請參閱 核心發送器物件簡介。