1

以下のコードはKbFilter_ServiceCallback、WDK 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どこか(ここ)で行われましたが、それにはwindows.hDeviceIoControlが必要で、 kbfiltr.cに含まれると他の多くのエラーが発生します。だから私は使いたい

irp = IoBuildDeviceIoControlRequest(IOCTL_KEYBOARD_SET_INDICATORS,... IoCallDriver( ..., irp ); しかし、私はこれを機能させることができませんでした。私はここ数日、これと一緒に行ってきたので、何か助けていただければ幸いです.

4

0 に答える 0