共用方式為


使用 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 要求傳遞給驅動程式時,會呼叫 I/O 佇列的 EvtIoResume 回呼函式。

每次架構呼叫驅動程式的 EvtIoStop 回呼函式時,函式通常會 完成取消 I/O 要求,或呼叫 WdfRequestStopAcknowledge 以將要求的擁有權傳回給架構。

雖然這樣做是選擇性的,但一般而言,您應該為電源管理的佇列提供 EvtIoStop 回呼函式。 藉由提供 EvtIoStop,您的驅動程式可協助縮短在裝置之前經過的時間,而且可能是系統進入低電源狀態。

如果您未為電源管理的佇列提供 EvtIoStop ,架構會等到從電源管理佇列傳遞至驅動程式的所有要求都已完成,再將裝置 (或系統) 移至較低的電源狀態或移除裝置。 這可能會讓系統無法進入其休眠狀態或另一個低系統電源狀態。 在極端情況下,可能會導致系統因為錯誤檢查碼 9F 而損毀。

如果您的驅動程式未將要求轉送至 I/O 目標,且不會保留不定時間的要求,您可以安全地省略 Power 受控佇列的 EvtIoStop

等候發送器物件

一般而言,驅動程式應該只使用發送器物件作為非bitrary 執行緒內容中的同步處理機制。

由於 要求處理常式會在 任意執行緒內容中執行,所以電源管理佇列的要求處理常式不得等候核心發送器物件設定。 這樣做可能會導致死結。

如需驅動程式何時可以等候發送器物件,以及無法執行哪些動作的詳細資訊,請參閱 核心發送器物件簡介