• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

WINDOWS中CTRL+ALT+DEL控制的实现(DDK版)

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 29次 | 进入软件测试论坛讨论

领测软件测试网

可能大家知道一些通过WINDOWS中DLL来控制的一些方法.但我要写的是使用DDK技术来实现控制,进而涉及到一些DDK编程的一些其他技术.我使用的是MICROSOFT SOFTWARE MICROSOFT WINDOWS 2000 DRIVER DEVELOPMENT KIT工具.在使用上比以前版本的DDK好用很多,但是还有一定难度.这可能需要一些驱动编程方面的知识.

例如以下一些概念:设备,虚拟驱动程序,WINDOWS中0和3环区别等等.

所谓的驱动程序无非是一些按WINDOWS中的标准运转的程序.这就需要我们知道这些标准.

当然MICRISOFT给我们提供了一些可以让我们通过学习可以使用的软件,这些软件就是WINDOWS标准的体现.学会使用这些软件也就知道WINDOWS一些内层标准了.常用的有VTOOLS,DDK,WINDRIVERS.等.其中VTOOLS和WINDRIVERS是更VISUAL和EASY化的东东.当然越VISUAL和EASY的东西功能上可能就受限制.就是说更底层的东西是不容易看见和做到的.DDK是更加底层化的开发软件.可以说基本上满足的我们的要求.但学会使用他不容易.下面就”WINDOWS中CTRL+ALT+DEL控制的实现”为例说明一下这个东东.

实际上我们要实现”WINDOWS中CTRL+ALT+DEL控制的实现”,可以使用DDK来编写键盘底层的驱动程序(过滤驱动程序).需要的文件是由DDK中SRC提供的kbfiltr.c和kbfiltr.H主文件.其他的相应文件(和编译相关的)当然也需要.

kbfiltr.H中提供一下涵数: 1. NTSTATUS KbFilter_AddDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT BusDeviceObject ); 这是增加设备涵数,主要是用来增加你自己需要的设备(可能需要和其他设备通讯) NTSTATUS KbFilter_CreateClose ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); 这是在设备创建和关闭时的涵数. NTSTATUS KbFilter_DispatchPassThrough( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); 传输向下IRP的涵数 NTSTATUS KbFilter_InternIoCtl ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); 内部IRP传输时IO控制 NTSTATUS KbFilter_IoCtl ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); 和用户层IO控制 NTSTATUS KbFilter_PnP ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS KbFilter_Power ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS KbFilter_InitializationRoutine( IN PDEVICE_OBJECT DeviceObject, // InitializationContext IN PVOID SynchFuncContext, IN PI8042_SYNCH_READ_PORT ReadPort, IN PI8042_SYNCH_WRITE_PORT WritePort, OUT PBOOLEAN TurnTranslationOn ); BOOLEAN KbFilter_IsrHook( PDEVICE_OBJECT DeviceObject, // IsrContext PKEYBOARD_INPUT_DATA CurrentInput, POUTPUT_PACKET CurrentOutput, UCHAR StatusByte, PUCHAR DataByte, PBOOLEAN ContinueProcessing, PKEYBOARD_SCAN_STATE ScanState ); VOID KbFilter_ServiceCallback( IN PDEVICE_OBJECT DeviceObject, IN PKEYBOARD_INPUT_DATA InputDataStart, IN PKEYBOARD_INPUT_DATA InputDataEnd, IN OUT PULONG InputDataConsumed ); VOID KbFilter_Unload ( IN PDRIVER_OBJECT DriverObject );

这其中有用的就是KbFilter_ServiceCallback()涵数(针对本例子).这个涵数提供给我们在键盘传输数据时可以截获和控制的服务.参数很简单:

IN PDEVICE_OBJECT DeviceObject设备对象.

IN PKEYBOARD_INPUT_DATA InputDataStart,数据开始包.

IN PKEYBOARD_INPUT_DATA InputDataEnd,数据终止包

在InputDataStart和InputDataEnd之间就是当前键盘输入的数据.想怎么改就怎么改拉.

设计一个算法让CTRL+ALT+DEL失效.COMPLETE!!


延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网