阅读:1990回复:5
KEYBOARD FILTER 如何filter IOCTL.!!!!!
我现在按照WINXP DDK. 的kbdfiltr摸版做一个Keyboard filter driver.需要这个filter driver截取一些deviceIoControl IOCTL进行处理,如用户用用
hDevice = CreateFile(\"\\\\\\\\.\\\\Kbd\", GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ,NULL, OPEN_EXISTING,0,NULL); 打开keyboard handle,用DevicIoControl读特定的键盘信息. if (!DeviceIoControl(hKbdDev, IOCTL_READTRACK1, &InputBuffer, DataLength, &OutputBuffer, DataLength, &ReturnedLength, NULL)) return GetLastError(); 问题是 1.这个filter driver好象不能过滤IOCTL,是否要Create一个新的device, user mode程序与新device发IOCTL才可以处理 2.如果需要新device,如何实现,最好有sample code 3.winxp ddk 的keyboard filter driver 道底在kbdclass上层还是下层. 附上我的source code,请指正.thanks a lot. |
|
|
沙发#
发布于:2005-02-25 13:56
1、你要拦什么?可以直接拦不一定非要创建设备
3、上面,也就是靠近应用程序 我现在按照WINXP DDK. 的kbdfiltr摸版做一个Keyboard filter driver.需要这个filter driver截取一些deviceIoControl IOCTL进行处理,如用户用用 |
|
|
板凳#
发布于:2005-02-25 22:10
这键盘代一个糍卡扫描器,目的是在扫描糍卡时,把糍卡数据存入驱动的BUFFER,不输出到键盘缓冲区,应用程序通过,DeviceIOControl读到糍卡信息.
1.filter driver不能截取IOCTL,是否要建立一个新Device截取ioctls,最好有例子. 2.VOID KbFilter_ServiceCallback( IN PDEVICE_OBJECT DeviceObject, IN PKEYBOARD_INPUT_DATA InputDataStart, IN PKEYBOARD_INPUT_DATA InputDataEnd, IN OUT PULONG InputDataConsumed );是filter driver截取键盘data的函数,我想去keyboard input data的一段数据如何做. Thanks a lot. |
|
地板#
发布于:2005-02-28 09:26
这键盘代一个糍卡扫描器,目的是在扫描糍卡时,把糍卡数据存入驱动的BUFFER,不输出到键盘缓冲区,应用程序通过,DeviceIOControl读到糍卡信息. filter driver能截取IOCTL,filter driver是没有名称的设备,所以发送到下面的IRP都要过filter driver |
|
|
地下室#
发布于:2005-02-28 21:17
Do you have example? Thanks a lot.
|
|
5楼#
发布于:2005-03-01 10:30
注意两点:
AddDevice中如下调用IoCreateDevice // Create the un-named filter device status = IoCreateDevice( pDrvObj, sizeof(DEVICE_EXTENSION), NULL, // no name FILE_DEVICE_UNKNOWN, 0, TRUE, &pFilterDevObj ); 截获IOCTL如下 if (pIrpStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_... //要截获的IOCTL控制码 ) { 具体的处理 } else //其它的IOCTL向下传递 return DispatchPassThru( pDevObj, pIrp ); |
|
|