WdfRequestIsCanceled与WdfRequestMarkCancelable

时间:2012-09-20 23:36:57

标签: windows kernel wdf kmdf irp

任何人都可以列出在wdf中使用以下两种IO取消方法的优缺点吗? 1)使用WdfRequestMarkCancelable()取消标记请求。提供取消例程并同步完成路径。 2)在处理IRP时继续使用WdfRequestIsCanceled()进行轮询。根据返回的值完成。

我知道WdfRequestIsCanceled()是一种轮询方法,而WdfRequestMarkCancelable()是异步的。但WdfRequestMarkCancelable()是否值得同步完成/取消路径所需的额外工作?

感谢您的投入。

1 个答案:

答案 0 :(得分:3)

WdfRequestIsCanceled()仅在您碰巧正在处理请求时才有用。并且,在Windows驱动程序中,您往往需要非常异步地构造事物,因此通常情况下您不会“碰巧”处理请求。

你实际上应该问自己一个不同的问题:我是否想要使用WdfRequestMarkCancelable,或者我想在你做与之相关的工作时将请求放回到“手动”队列中。将其置于手动队列将使其可取消。如果取消后你需要做任何事情,你可以在手动队列本身上设置一个取消回调。

每种方法都有利有弊。我个人更喜欢使用WdfRequestMarkCancelable直接处理取消。大多数人更喜欢将请求放在手动队列中。