Keydata=Irp->AssociatedIrp.SystemBuffer; numKeys=Irp->IoStatus.Information / Sizeof(KEYBOARD_INPUT_DATA); for ( i=0;i<numKeys;i++) { DbgPrint(("numKeys : %d ",numKeys)); DbgPrint(("Scan code : %x ",KeyData->MakeCode)); DbgPrint(("%s\n",KeyData->Flags? "up":"down")); MyPrintKeyStroke((UCHAR)KeyData->MakeCode); if (KeyData->MakeCode==CAPS_LOCK) { KeyData->MakeCode=LCONTROL; } }
以上是书上的源代码,整个循环体只遍历了第一个结构体,后面的并没有进行操作,虽然有个循环但是并没有什么实质的作用,正确的遍历代码应该是下面的样子。程序代码所在页面Page-73
Keydata=Irp->AssociatedIrp.SystemBuffer; numKeys=Irp->IoStatus.Information / Sizeof(KEYBOARD_INPUT_DATA); for ( i=0;i<numKeys;i++,numKeys++) { DbgPrint(("numKeys : %d ",numKeys)); DbgPrint(("Scan code : %x ",KeyData->MakeCode)); DbgPrint(("%s\n",KeyData->Flags? "up":"down")); MyPrintKeyStroke((UCHAR)KeyData->MakeCode); if (KeyData->MakeCode==CAPS_LOCK) { KeyData->MakeCode=LCONTROL; } }
原创文章,转载请注明: 转载自火星信息安全研究院
本文链接地址: 键盘过滤驱动勘误《寒江独钓》: http://www.h4ck.org.cn/2010/01/drivers/







![Validate my RSS feed [Valid RSS]](http://www.h4ck.org.cn/valid-rss-rogers.png)

