littlefish2000
驱动牛犊
驱动牛犊
  • 注册日期2005-02-16
  • 最后登录2005-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1990回复:5

KEYBOARD FILTER 如何filter IOCTL.!!!!!

楼主#
更多 发布于:2005-02-25 01:07
我现在按照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_testfiltr18.zip (65KB)  19
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-25 13:56
1、你要拦什么?可以直接拦不一定非要创建设备
3、上面,也就是靠近应用程序

我现在按照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.

 
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
littlefish2000
驱动牛犊
驱动牛犊
  • 注册日期2005-02-16
  • 最后登录2005-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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.
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-28 09:26
这键盘代一个糍卡扫描器,目的是在扫描糍卡时,把糍卡数据存入驱动的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.

filter driver能截取IOCTL,filter driver是没有名称的设备,所以发送到下面的IRP都要过filter driver
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
littlefish2000
驱动牛犊
驱动牛犊
  • 注册日期2005-02-16
  • 最后登录2005-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-28 21:17
Do you have example? Thanks a lot.
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
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 );

滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
游客

返回顶部