IWDFIoRequest2::StopAcknowledge 方法 (wudfddi.h)
[警告: UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 來撰寫。 未將新功能新增至 UMDF 1,且較新版本的 #DB0786FEC1D8E4024AEB2C3350945F451 上不支援 UMDF 1。 通用 Windows 驅動程式必須使用 UMDF 2。 如需詳細資訊,請參閱使用 UMDF 使用者入門。]
StopAcknowledge 方法會通知架構驅動程式已停止處理指定的 I/O 要求。
語法
void StopAcknowledge(
[in] BOOL Requeue
);
參數
[in] Requeue
布爾值,如果為 TRUE,則會導致架構將要求重新排入佇列,讓架構再次將它傳遞給驅動程式。 如果 為 FALSE,則架構不會重新佇列要求。 如需詳細資訊,請參閱接下來的<備註>一節。
傳回值
無
備註
如果驅動程式為 I/O 佇列註冊 IQueueCallbackIoStop::OnIoStop 回呼函式,則當佇列的基礎裝置離開其運作 (D0) 狀態時,架構會呼叫它。 架構會針對驅動程式在停止佇列時擁有的每個 I/O 要求呼叫此回呼函式。 驅動程式必須執行下列其中一項,來完成、取消或延後處理每個要求:
- 如果驅動程式擁有要求,它可以呼叫 IWDFIoRequest::Complete 來完成或取消要求。
- 如果驅動程式已將要求轉送至 I/O 目標,它可以呼叫 IWDFIoRequest::CancelSentRequest 嘗試取消要求。
- 如果驅動程式延後處理要求,則必須呼叫 StopAcknowledge。
如果驅動程式未針對 IQueueCallbackIoStop::OnIoStop 回呼函式接收的每個要求呼叫 IWDFIoRequest::Complete 或 StopAcknowledge,則架構不允許裝置離開其運作 (D0) 狀態。 這可能會讓系統無法進入其休眠狀態或另一個低系統電源狀態。
當驅動程式的 IQueueCallbackIoStop::OnIoStop 回 呼函式呼叫 StopAcknowledge 時,可以將 Requeue 參數設定為 TRUE 或 FALSE:
-
將 [重新佇列 ] 設定為 TRUE 會導致架構將要求放回其 I/O 佇列。
當基礎裝置回到其運作 (D0) 狀態時,架構會將要求重新傳遞給驅動程式。
-
將 [重新排入佇列 ] 設定為 FALSE 會導致要求擁有權與驅動程式保持一致。 驅動程式必須停止執行任何需要硬體存取的 I/O 處理。
當基礎裝置回到其工作 (D0) 狀態時,架構會呼叫驅動程式的 IQueueCallbackIoResume::OnIoResume 回呼函式,讓驅動程式可以繼續處理要求。
呼叫 StopAcknowledge 之前,驅動程式的 IQueueCallbackIoStop::OnIoStop 回呼函式必須停止所有需要存取基礎裝置的 I/O 要求處理,因為裝置即將進入低電源狀態。
範例
下列程式代碼範例是 IQueueCallbackIoStop::OnIoStop 回呼函式,會檢查接收的要求是否可取消,如果是,則會呼叫 IWDFIoRequest::UnmarkCancelable。 如果 IWDFIoRequest::UnmarkCancelable 傳回HRESULT_FROM_WIN32 (ERROR_OPERATION_ABORTED) ,則範例只會傳回 ,因為驅動程式的 IRequestCallbackCancel::OnCancel 回 呼函式會處理要求。 否則,此範例會呼叫 StopAcknowledge 並指定 FALSE ,讓架構最終會呼叫驅動程式的 IQueueCallbackIoResume::OnIoResume 回 呼函式。
void
CMyReadWriteQueue::OnIoStop(
__in IWDFIoQueue* pWdfQueue,
__in IWDFIoRequest* pWdfRequest,
__in ULONG ActionFlags
)
{ HRESULT status;
if (ActionFlags & WdfRequestStopRequestCancelable) {
status = pWdfRequest->UnmarkCancelable();
if (status == HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED)) {
return;
}
}
//
// Declare an IWDFIoRequest2 interface pointer and obtain the
// IWDFIoRequest2 interface from the IWDFIoRequest interface.
//
CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;
r2->StopAcknowledge(FALSE);
}
規格需求
需求 | 值 |
---|---|
終止支援 | UMDF 2.0 和更新版本中無法使用。 |
目標平台 | 桌面 |
最低UMDF版本 | 1.9 |
標頭 | wudfddi.h (包括 Wudfddi.h) |
Dll | WUDFx.dll |
另請參閱
IQueueCallbackIoResume::OnIoResume