键盘过滤驱动勘误《寒江独钓》

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 smile

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;
    }
}

原创文章,转载请注明: 转载自 obaby@mars

本文标题: 《键盘过滤驱动勘误《寒江独钓》》

本文链接地址: http://h4ck.org.cn/2010/01/drivers/

You may also like

发表评论

电子邮件地址不会被公开。 必填项已用*标注