WEB开发网
开发学院软件开发VC 使用DriverStudio构造USB过滤驱动程序 阅读

使用DriverStudio构造USB过滤驱动程序

 2010-08-22 20:48:26 来源:WEB开发网   
核心提示:这两段代码基本上和自动生成的代码差不多,AddDevice的作用是构造一个过滤器的实例,使用DriverStudio构造USB过滤驱动程序(3),关键的代码在Device类,在这个类里,那么这个URB应该是URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE,如下:NTSTATUS Us

这两段代码基本上和自动生成的代码差不多。AddDevice的作用是构造一个过滤器的实例。

关键的代码在Device类。在这个类里,我们把过滤器插入设备栈,并拦截IRP,用自己的完成例程来实现特定的功能。

Device构造函数

UsbFilterDevice::UsbFilterDevice(PDEVICE_OBJECT Pdo, ULONG Unit) :
   KWdmFilterDevice(Pdo, NULL)
{
   T << "UsbFilterDevice::UsbFilterDevice\n";
   // Check constructor status
   if ( ! NT_SUCCESS(m_ConstructorStatus) )
   {
     return;
   }
   // Remember our unit number
   m_Unit = Unit;
   // initialize the USB lower device
   m_Usb.Initialize(this, Pdo);
   NTSTATUS status = AttachFilter(&m_Usb); //Attach the filter
   if(!NT_SUCCESS(status))
     {
     m_ConstructorStatus = status;
     return;
     }
   SetFilterPowerPolicy();
   SetFilterPnpPolicy();
}

在DDK中,我们用IoAttachDevice将设备对象插入设备栈中。DriverStudio封装了这个函数。在DriverStudio中,其他驱动程序需要用Initialize来初始化设备对象和接口,对于过滤驱动,我们关键是需要Attachfilter将其附加在堆栈中。---www.bianceng.cn

对于大部分如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  下一页

Tags:使用 DriverStudio 构造

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