gpt4 book ai didi

c - 内核模式键盘过滤器拦截-双输出

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:36 27 4
gpt4 key购买 nike

我编辑了 WDK kbfiltr.c 回调例程以拦截 Esc 键并将其替换为“E”。
它有效,只是它总是用 2 个“E”替换它。
所以按 Esc 会输出 'ee'。这是代码:

{
PKEYBOARD_INPUT_DATA pCur = InputDataStart;

PDEVICE_EXTENSION devExt;
WDFDEVICE hDevice;

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

while (pCur < InputDataEnd)
{
ULONG consumed = 0;

if (pCur->MakeCode == 0x01) {//Esc
pCur->MakeCode = 0x12; //E
}
else{
pCur++;
continue;
}

// indicate one packet at a time
(*(PSERVICE_CALLBACK_ROUTINE)(ULONG_PTR)
devExt->UpperConnectData.ClassService)(
devExt->UpperConnectData.ClassDeviceObject,
pCur,
pCur+1,
&consumed);
pCur++;
}
// tell the caller you consumed everything
*InputDataConsumed = (InputDataEnd-InputDataStart);

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

有人知道我做错了什么吗?

最佳答案

我认为这是编码错误。如下更改代码似乎可以正常工作。

    {
PKEYBOARD_INPUT_DATA pCur = InputDataStart;

PDEVICE_EXTENSION devExt;
WDFDEVICE hDevice;

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

while (pCur < InputDataEnd)
{
ULONG consumed = 0;

if (pCur->MakeCode == 0x01) {//Esc
pCur->MakeCode = 0x12; //E
}

// indicate one packet at a time
(*(PSERVICE_CALLBACK_ROUTINE)(ULONG_PTR)
devExt->UpperConnectData.ClassService)(
devExt->UpperConnectData.ClassDeviceObject,
pCur,
pCur+1,
&consumed);
pCur++;
}
// tell the caller you consumed everything
*InputDataConsumed = (InputDataEnd-InputDataStart);

}

关于c - 内核模式键盘过滤器拦截-双输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com