2013-03-07 43 views
1

我正在写一个使用WDF(KMDF)的Windows设备驱动程序,用于一次传输大块数据的USB3设备。我编写了一个测试此功能的用户级应用程序,并且大部分情况下都能正常工作。Windows何时取消机上WDF请求?

我遇到的问题是这样的:我发现当我强制关闭(从cmd窗口CTRL + C)应用程序中间传输时,取消时正在进行的数据传输立即停止,主机似乎只是停止与该端点进行通信。我在USB总线上观察到了这一点。这些请求在功能驱动程序中返回为“STATUS_CANCELLED”

我已经查看了其他类似的第三方设备,并在这些设备上运行了其测试应用程序及其驱动程序,并发现当我杀死他们的测试应用程序进行中间数据传输时,传输在应用程序关闭前完成。

我的问题:

如何/何时决定的Windows杀死飞行请求时,应用程序已关闭?

有没有办法将请求标记为“uncancelable”?我搜索了文档,但没有发现任何暗示我需要做一些事情来阻止请求在幕后传输中被取消。

任何见解赞赏,谢谢。

回答

3

这不是关于设备驱动程序;这是关于控制台应用程序handles the Ctrl-C event的方式。控制台应用程序必须捕获Ctrl-C事件,并在退出之前等待传输完成。

+0

我明白了。谢谢。这在逻辑上对我来说很合理,但是驾驶员可以做些什么来提高强度?换句话说,我所描述的(甚至可能将事件标记为不可撤销的)? – 8bitcartridge 2013-03-07 18:46:36

+0

设备驱动程序必须保持应用程序打开或“阻止”(因为它是进程的容器),我认为这会被认为是“不良行为”。从用户的角度来看,Ctrl-C的意思是“我想停下来,现在。”我不知道Windows如何知道应用程序已经过去了;我怀疑句柄可能已失效,或者设备驱动程序从进程中获取它正在退出的消息。 – 2013-03-07 18:48:15