IWDFIoRequest::MarkCancelable 方法 (wudfddi.h)

[警告: UMDF 2 是最新版本的 UMDF,并取代 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 不会向 UMDF 1 添加任何新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。]

MarkCancelable 方法允许取消 I/O 请求。

语法

void MarkCancelable(
  [in] IRequestCallbackCancel *pCancelCallback
);

参数

[in] pCancelCallback

指向 IRequestCallbackCancel 接口的指针,框架在 I/O 请求取消后调用其方法。

返回值

备注

驱动程序收到 I/O 请求作为 IQueueCallbackRead::OnReadIQueueCallbackWrite::OnWriteIQueueCallbackDeviceIoControl::OnDeviceIoControl 事件回调函数的输入后,驱动程序可以调用 MarkCancelable 方法来启用请求取消。 稍后,驱动程序可以调用 IWDFIoRequest::UnmarkCancelable 方法来禁用取消请求。

在驱动程序调用 MarkCancelable 之前,驱动程序必须实现 IRequestCallbackCancel::OnCancel 方法。

用户模式驱动程序框架 (UMDF) 每个队列只允许一个 IRequestCallbackCancel::OnCancel 方法。 因此,当驱动程序为与特定队列关联的请求调用 MarkCancelable 以使框架能够取消这些请求时,驱动程序必须将指向同一 request-callback 对象的 IRequestCallbackCancel 接口的指针传递。 稍后,为了取消每个请求,框架在调用此 request-callback 对象的 IRequestCallbackCancel::OnCancel 方法时,将指向请求的 IWDFIoRequest 接口的指针。

驱动程序必须从 IRequestCallbackCancel::OnCancel 方法或其常规 I/O 完成路径调用 IWDFIoRequest::Complete。

在驱动程序调用 MarkCancelable 以启用取消后,当驱动程序拥有请求对象时,请求仍可取消,除非驱动程序调用 UnmarkCancelable 来禁用取消。

如果驱动程序调用 IWDFIoRequest::ForwardToIoQueue 方法将请求转发到其他队列,则以下规则适用:

  • 当驱动程序将请求转发到其他队列时,无法启用取消 I/O 请求。

    通常,驱动程序不应在调用 IWDFIoRequest::ForwardToIoQueue 之前调用 MarkCancelable 来启用取消请求。 或者,驱动程序可以使请求可取消。 但是,驱动程序随后必须调用 UnmarkCancelable ,以在调用 IWDFIoRequest::ForwardToIoQueue 之前禁用取消请求。

  • 当请求位于第二个队列中时,框架拥有它,并且可以取消它,而无需通知驱动程序。
  • 框架从第二个队列取消请求排队并将请求传递给驱动程序后,驱动程序可以调用 MarkCancelable 以启用取消。

示例

下面的代码示例设置一个请求,以便框架可以取消它。

    //
    // The QueryInteraface should not fail.
    //
    (VOID)this->QueryInterface(_uuidof(IRequestCallbackCancel),
                               (PVOID *)&cancelCallback);

    pWdfRequest->MarkCancelable(cancelCallback);

要求

要求
结束支持 在 UMDF 2.0 及更高版本中不可用。
目标平台 桌面
最低 UMDF 版本 1.5
标头 wudfddi.h (包括 Wudfddi.h)
DLL WUDFx.dll

另请参阅

IQueueCallbackDeviceIoControl::OnDeviceIoControl

IQueueCallbackRead::OnRead

IQueueCallbackWrite::OnWrite

IRequestCallbackCancel

IRequestCallbackCancel::OnCancel

IWDFIoRequest

IWDFIoRequest::Complete

IWDFIoRequest::ForwardToIoQueue

IWDFIoRequest::UnmarkCancelable