从PUDN上下载的一份键盘驱动的源代码(http://read.pudn.com/downloads108/sourcecode/windows/vxd/447595/sys/inp.c__.htm) 在我的笔记本上测试发现按下第一个键之后,键盘就停止响应了,然后system进程占据100%的cpu。WinDbg调试,发现问题出在InpGetKeyboardInterruptVector函数的 
IOAPICGate[0] = 0x10 + 2 * 1; // 0x10 + 2 * IRQ, Keyboard's irq is 1    
行上。如果把XP的DEP关掉之后,就不会死机,运行正常。我对键盘驱动方面的东西很不懂,希望高手能帮忙解决下这个问题.....

解决方案 »

  1.   

    随便YY一下,那个驱动是PS2键盘的,笔记本是usn的键盘……
    换台式机会出错吗
      

  2.   

    DEP指数据执行保护,标记为数据区的数据不能执行代码,是一种安全保护措施。你试试用和你的笔记本的os版本相符的ddk编译驱动,再安装。
      

  3.   

    因为这段代码中要把数据当作代码来执行,DEP的作用就是防止这种情况的。可以先写一个函数来调用中断,运行时在修改代码,这种做法略有些难度。另外可以用一种土办法来解决,写这样一个函数,通过这个函数来调用中断:
    void CallInt(BYTE IntNumber)
    {
        switch(IntNumber)
        {
        case 0:
            __asm int 0;
            break;
        case 1:
            __asm int 1;
            break;
        case 2:
            __asm int 2;
            break;
        //……
            //……
            //……
        case 254:
            __asm int 254;
            break;
        case 255:
            __asm int 255;
            break;
        }
    }
      

  4.   

    我不确切是不是与DEP有关,但关掉DEP之后,代码确实工作正常。另外,按照6楼的方法改过之后,仍然会在执行IOAPICGate[0] = 0x10 + 2 * 1; // 0x10 + 2 * IRQ, Keyboard's irq is 1  时死机。
    代码不长,仅400多行,希望高手能去看一眼