1

下面的代码是KbFilter_ServiceCallbackWDK kbfiltr.c示例中的(修改后的)例程。事实上,它构建得很好,但是当我取消注释时IRP *irp;,它会导致错误:

1>目录 c:\winddk\kbfiltr\sys 1>c:\winddk\kbfiltr\sys\kbfiltr.c(827) 中的错误:错误 C2220:警告视为错误 - 未生成“对象”文件 1>链接:错误LNK1181: 无法打开输入文件 'c:\winddk\kbfiltr\sys\objchk_wxp_x86\i386\kbfiltr.obj'

这对我不是很有帮助。我已经读过,在块声明中需要在任何语句之前,我确信我已经完成了,所以我对此感到非常困惑。

    VOID
KbFilter_ServiceCallback(
    IN PDEVICE_OBJECT  DeviceObject,
    IN PKEYBOARD_INPUT_DATA InputDataStart,
    IN PKEYBOARD_INPUT_DATA InputDataEnd,
    IN OUT PULONG InputDataConsumed
    )
{
    KEYBOARD_INPUT_DATA *kbDat;//Apparently declarations need to be before any statements
    ULONG consumed;
    //IRP *irp;

    PDEVICE_EXTENSION   devExt;
    WDFDEVICE   hDevice;
    hDevice = WdfWdmDeviceGetWdfDeviceHandle(DeviceObject);
    devExt = FilterGetData(hDevice);    

    kbDat = kbDat = InputDataStart;

    while (kbDat < InputDataEnd)
    {
       consumed = 0;

       if (kbDat->MakeCode == 0x01) {//Esc
           if((kbDat->Flags & KEY_MAKE) == KEY_MAKE){
             //SEND IRP ...IoBuildDeviceIoControlRequest(IOCTL_KEYBOARD_SET_INDICATORS,...
           }
        }
        else{
            kbDat++;
             continue;
        }

        (*(PSERVICE_CALLBACK_ROUTINE)(ULONG_PTR) 
    devExt->UpperConnectData.ClassService)(
            devExt->UpperConnectData.ClassDeviceObject,
            kbDat,
            kbDat+1,
            &consumed);
        kbDat++;
    }

    *InputDataConsumed = (InputDataEnd-InputDataStart);


    (*(PSERVICE_CALLBACK_ROUTINE)(ULONG_PTR) devExt->UpperConnectData.ClassService)(
        devExt->UpperConnectData.ClassDeviceObject,
        InputDataStart,
        InputDataEnd,
        InputDataConsumed);
}

当我在这里时,我还需要帮助填写 //SEND IRP ...IoBuildDeviceIoControlRequest(IOCTL_KEYBOARD_SET_INDICATORS,...。我想发送一个ioctl * irp * 来获取灯的状态并在按下NumLock时切换它。Esc某处(此处)已完成,DeviceIoControl但这需要windows.h,当包含在kbfiltr.c中时会导致许多其他错误。所以我想用

irp = IoBuildDeviceIoControlRequest(IOCTL_KEYBOARD_SET_INDICATORS,... IoCallDriver( ..., irp ); 但我还没有设法让这个工作。在过去的几天里,我一直在讨论这个问题,所以我非常感谢任何帮助。

4

0 回答 0