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

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

 2006-07-19 11:37:11 来源:WEB开发网   
核心提示: 在设置好条件以后,再来实现完成例程,如何构造一个简单的USB过滤驱动程序(6),所有的检查、修改等动作都是在完成例程里面完成的,NTSTATUS UsbFilterDevice::DeviceControlComplete(KIrp I){ PURB p = I.Urb(

在设置好条件以后,再来实现完成例程。所有的检查、修改等动作都是在完成例程里面完成的。

NTSTATUS UsbFilterDevice::DeviceControlComplete(KIrp I)
{
   PURB p = I.Urb(CURRENT);
   if(p)
   {
//拦截到设备返回的描述表,
     char* DescriptorBuffer = (char*)p->UrbControlDescriptorRequest.TransferBuffer;
//指向第三个字节,表示设备Usage属性的值
     DescriptorBuffer += 3;
//如果值为6则改成0,6表示hid键盘,0表示未知设备
//在设备管理器里面,原来的hid兼容键盘就不复存在了,取而代之的则是hid兼容设备
     if ((*DescriptorBuffer&0xff) == 6) 
       *DescriptorBuffer = 0;
   }
   return I.Status();
}
 

读者可以对照DriverWorks中的例子,直接替换掉(或者修改)上面这两个函数,再编译一下,便可以得到一个完整的键盘过滤器驱动程序。

其实,只要弄清楚了我们需要做些什么动作,在DriverStudio里面只需要写少量的关键代码,便可实现我们的要求,其余的大部分工作,或有范例可供参考,或有Driver Wizard自动生成。

从上面可以看出,我们只需要修改这两个函数,拦截合适的IRP,便可以在完成例程里面实现我们特定的要求。正如开头所说,我们也可以拦截其他的IRP,拦截其他的URB,或者拦截特定键盘的按键键值,将之传递到用户态,以方便实现联想、实达等随机配备的多功能键盘的功能。

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

Tags:如何 构造 一个

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