WEB开发网
开发学院软件开发VC 如何构造一个简单的USB过滤驱动程序 阅读

如何构造一个简单的USB过滤驱动程序

 2006-07-19 11:37:11 来源:WEB开发网   
核心提示: 对于大部分如IRP_MJ_SYSTEM_CONTROL等IRP,我们所做的只需用PassThrough(Irp)将其直接往设备栈下层传递,如何构造一个简单的USB过滤驱动程序(5),不需要做任何工作,这些代码我们就不一一列举了,那么这个URB应该是URB_FUNCTION_GET_DESC

对于大部分如IRP_MJ_SYSTEM_CONTROL等IRP,我们所做的只需用PassThrough(Irp)将其直接往设备栈下层传递,不需要做任何工作。这些代码我们就不一一列举了。下面的部分才是本文的关键。

我们知道,HIDUSB.SYS是使用内部IOCTRL发出URB给USB类驱动程序(USBD)读取数据的,那么,HIDUSB首先必须构造一个IRP_MJ_INTERNAL_DEVICE_CONTROL,它的IOCTL功能码为IOCTL_INTERNAL_USB_SUBMIT_URB(发出URB的内部IOCTL)。另外,因为我们要检查并修改的是USB键盘某个接口的报告描述,那么这个URB应该是URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE,如下:

NTSTATUS UsbFilterDevice::InternalDeviceControl(KIrp I)

   T << "UsbFilterDevice::InternalDeviceControl\n";
   // Pass through IOCTLs that are not submitting an URB
//不是我们感兴趣的IOCTL不要理它
   if (I.IoctlCode() != IOCTL_INTERNAL_USB_SUBMIT_URB)
     return DefaultPnp(I);
   PURB p = I.Urb(CURRENT);  // get URB pointer from IRP
//不是我们感兴趣的URB,也不要理它,
   if (p->UrbHeader.Function != 
URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE)
     return DefaultPnp(I);
//符合要求的IRP才被设置完成例程
   return PassThrough(I, LinkTo(DeviceControlComplete), this);
}

上一页  1 2 3 4 5 6 7  下一页

Tags:如何 构造 一个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接