IWDFIoRequest2::StopAcknowledge 方法 (wudfddi.h)
[警告: UMDF 2 是最新版本的 UMDF,并取代 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 不会向 UMDF 1 添加任何新功能,并且较新版本的 Windows 10 上对 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