阅读:3267回复:12
将拦截到的IRP直接完成用户被禁言,该主题自动屏蔽! |
|
最新喜欢:![]() |
沙发#
发布于:2001-09-06 01:31
你是在什么位置填URB的?
有没检查 BufferLength? |
|
板凳#
发布于:2001-09-06 08:12
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2001-09-06 08:23
用户被禁言,该主题自动屏蔽! |
|
地下室#
发布于:2001-09-06 09:09
我也这样这样做过,但与你有些不同。
我设定TransferBufferLength为我传送的字节数。 设定UrbHeader.Status = USBD_STATUS_SUCCESS。(应该是这儿) Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 传送的字节数; IoCompleteRequest(Irp,IO_MOUSE_INCREMENT);考虑到对HID设备的 优先级提升。 return STATUS_SUCCESS; |
|
5楼#
发布于:2001-09-06 09:32
用户被禁言,该主题自动屏蔽! |
|
6楼#
发布于:2001-09-06 10:08
我没有监视过,不知是否是你说的那样。
我看了看WDM.H中关于IRP结构的定义,采用 Irp->IoStatus.Information表示传送的字节数不会错。因为没有其他比较合适的地方了。 我想问的是,你监视的是一般的驱动程序还是使用URB的USB驱动程序。也许这个USB驱动程序自己认为该域不重要,而只设定了 TransferBufferLength表示这次传送的字节数。 |
|
7楼#
发布于:2001-09-06 10:19
用户被禁言,该主题自动屏蔽! |
|
8楼#
发布于:2001-09-06 12:09
查看一下你的 removelock 是不是有问题?
因为我也用了类拟的方法了, 直接完成的。 不下传了。 但我不是用的读数据IRP, 我用的写数据的, 数据处理完就complete 了. |
|
9楼#
发布于:2001-09-06 13:21
用户被禁言,该主题自动屏蔽! |
|
10楼#
发布于:2001-09-06 14:37
complete 的一个重要事件就是调 complete 列程。
应该是 hidusb.sys 里设置的这个列程。 并不要你的程序里设置 |
|
11楼#
发布于:2001-09-06 16:55
你说的真是奇怪,仔细检查一下吧。
我的驱动程序也是hidusb的LowerFilter,也需要在有的时候直接完成hidusb的请求,我用上述方法一切正常呀。 由于我的驱动要在98/2000下同时运行,故没有用remove_lock, 我要提醒你的是: HidUsb同时维持两个读请求,这两个读请求的IRP生成后一直使用不改变。 你可以实验: 建立一个什么也不做的lowerFilter,监视hidusb发来的IRP。 |
|
12楼#
发布于:2001-09-06 21:43
用户被禁言,该主题自动屏蔽! |
|