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 请求调用此回调函数。 驱动程序必须通过执行以下操作之一完成、取消或推迟每个请求的处理:

如果驱动程序调用 StopAcknowledge,则必须从其 IQueueCallbackIoStop::OnIoStop 回调函数中调用此方法。

如果驱动程序不对 IQueueCallbackIoStop::OnIoStop 回调函数接收的每个请求调用 IWDFIoRequest::Complete 或 StopAcknowledge,则框架不允许设备将其工作 (D0) 状态。 这种不作为可能会阻止系统进入其休眠状态或其他低系统电源状态。

当驱动程序的 IQueueCallbackIoStop::OnIoStop 回调函数调用 StopAcknowledge 时,它可以将 Requeue 参数设置为 TRUEFALSE

  • “重新排队” 设置为 TRUE 会导致框架将请求放回其 I/O 队列。

    当基础设备返回到其工作 (D0) 状态时,框架将向驱动程序重新发出请求。

  • “重新排队” 设置为 FALSE 会导致请求的所有权保留在驱动程序中。 驱动程序必须停止执行任何需要硬件访问的 I/O 处理。

    当基础设备返回到其工作 (D0) 状态时,框架将调用驱动程序的 IQueueCallbackIoResume::OnIoResume 回调函数,以便驱动程序可以继续处理请求。

如果驱动程序之前已调用 IWDFIoRequest::MarkCancelable,则必须先调用 IWDFIoRequest::UnmarkCancelable ,然后才能调用 StopAcknowledge ,并且 Requeue 设置为 TRUE

在调用 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

IQueueCallbackIoStop::OnIoStop

IWDFIoRequest2