Windows键盘过滤驱动 [问题点数:20分,无满意结帖,结帖人weixin_45050614]

Bbs1
本版专家分:0
结帖率 100%
初学驱动开发-windows驱动-键盘过滤驱动
在入口DriverEntry函数做主要操作 1.AttachSysDevice(pDriverObject, L"\\Device\\KeyboardClass0"); 2.取消关联<em>驱动</em>设备对象 pDriverObject->DriverUnload = DetachSysDevice; 3.添加IRP_MJ_READ并且参考代码实现DispatchRead 实例代码如下:
键盘过滤驱动
简单的<em>键盘</em><em>过滤</em><em>驱动</em>,<em>驱动</em>配置已经配好了。我亲自编译通过。请自行配置环境变量进行编译。
键盘驱动过滤
小弟刚刚接触WINDOWS<em>驱动</em>开发,写程序的时候,遇到几个问题,希望大家给解答一下rn主功能:<em>键盘</em><em>驱动</em><em>过滤</em>rn添加功能:监测<em>键盘</em>插拔rn我现在的思路是:在PNP分发函数,在这里面,可以监测<em>键盘</em>的拔出,但是插入监测不到rnPNP函数中的代码,如下rn[code=c]rnNTSTATUS c2pPnP( rn IN PDEVICE_OBJECT DeviceObject, rn IN PIRP Irp rn ) rn rn PC2P_DEV_EXT devExt; rn PIO_STACK_LOCATION irpStack; rn NTSTATUS status = STATUS_SUCCESS; rn KIRQL oldIrql; rn KEVENT event; rnrn // 获得真实设备。rn devExt = (PC2P_DEV_EXT)(DeviceObject->DeviceExtension); rn irpStack = IoGetCurrentIrpStackLocation(Irp); rnrn switch (irpStack->MinorFunction) rn   rn  case IRP_MN_START_DEVICE:rn   KdPrint(("insert Device\n")):rn   break;rn case IRP_MN_REMOVE_DEVICE: rn KdPrint(("IRP_MN_REMOVE_DEVICE\n")); rnrn // 首先把请求发下去rn IoSkipCurrentIrpStackLocation(Irp); rn IoCallDriver(devExt->LowerDeviceObject, Irp); rn // 然后解除绑定。rn IoDetachDevice(devExt->LowerDeviceObject); rn // 删除我们自己生成的虚拟设备。rn IoDeleteDevice(DeviceObject); rn status = STATUS_SUCCESS; rn break; rnrn default: rn // 对于其他类型的IRP,全部都直接下发即可。 rn   KdPrint(("Other IRP"\n));rn IoSkipCurrentIrpStackLocation(Irp); rn status = IoCallDriver(devExt->LowerDeviceObject, Irp); rn rn return status; rnrn[/code]rn这段代码,是在网上COPY的.看到代码中,监测到<em>键盘</em>拔出之后,会解除绑定.所以,把解除绑定那块的代码给去掉了.但是,依然不好使.rn现像是这样的: 第一次拔掉<em>键盘</em>的时候,会进入case IRP_MN_REMOVE_DEVICE,但是,也同样会进到default中.之后,再插入和拔出,都不会再进入到PNP的函数中了.但是,会进到<em>驱动</em>的dispatch中.rn我的疑问:rn1进入default中是什么IRPrn2第一次之后的插拔,为什么会进入dispatch中,但是,进不到PNP的处理中?rn3根据测试的情况知道,这个<em>驱动</em>,不会因为<em>键盘</em>的拔出而卸载,那么,我们建立的那个设备对象,如果不Delete,当<em>键盘</em>再次插入的时候,会不会主动Attach到<em>键盘</em>上呢?rn4怎么才能正确的监测<em>键盘</em>的插入?rn哪位有WINDOWS<em>驱动</em>开发群,麻烦发一下
键盘过滤驱动学习
--------------------------------------------------------------2016-7-15-------------- 1.<em>windows</em>中的<em>键盘</em>技术原理(<em>键盘</em><em>过滤</em><em>驱动</em>是工作在异步模式下)   在任务管理器中,csrss.exe进程描述为:   Csrss.exe进程有一个线程叫做win32!RawInputThread,这
关于键盘驱动过滤
代码如下:rnNTSTATUS c2pDispatchRead( rn IN PDEVICE_OBJECT DeviceObject, rn IN PIRP Irp ) rn rn NTSTATUS status = STATUS_SUCCESS; rn PC2P_DEV_EXT devExt; rn PIO_STACK_LOCATION currentIrpStack; rn KEVENT waitEvent;rn KeInitializeEvent( &waitEvent, NotificationEvent, FALSE );rnrn if (Irp->CurrentLocation == 1) rn rn ULONG ReturnedInformation = 0; rn KdPrint(("Dispatch encountered bogus current location\n")); rn status = STATUS_INVALID_DEVICE_REQUEST; rn Irp->IoStatus.Status = status; rn Irp->IoStatus.Information = ReturnedInformation; rn IoCompleteRequest(Irp, IO_NO_INCREMENT); rn return(status); rn rnrn // 全局变量键计数器加1rn gC2pKeyCount++;rnrn // 得到设备扩展。目的是之后为了获得下一个设备的指针。rn devExt =rn (PC2P_DEV_EXT)DeviceObject->DeviceExtension;rnrn // 设置回调函数并把IRP传递下去。 之后读的处理也就结束了。rn // 剩下的任务是要等待读请求完成。rn currentIrpStack = IoGetCurrentIrpStackLocation(Irp); rn IoCopyCurrentIrpStackLocationToNext(Irp);rn IoSetCompletionRoutine( Irp, c2pReadComplete, rn DeviceObject, TRUE, TRUE, TRUE ); rn return IoCallDriver( devExt->LowerDeviceObject, Irp ); rnrn问题:为什么要在开始判断Irp->CurrentLocation == 1;而对于是一的情况为什么有返回了。请帮忙,谢谢
键盘过滤驱动问题
在挂靠设备的时候,挂在了KeyBoardClass0上。rn[code=c]rnLowerkb = IoAttachDeviceToDeviceStack(FilterKb,TargetKb);rn[/code]rnrn安装完成后,能正常工作,完成正常<em>过滤</em>,一切正常。rn但是重启电脑后,所有的按键都失效了,好像没有<em>键盘</em>一样。rn用WinDbg调试的时候,能正常接收到 IRP_MJ_CREATE 消息。IRP处理方式为:跳过本层<em>驱动</em>。rn[code=c]rnIoSkipCurrentIrpStackLocation(pIrp);rnreturn IoCallDriver(Lowerkb,pIrp);rn[/code]rn但是之后就收不到任何消息了,包括 IRP_MJ_READ,按下<em>键盘</em>也收不到。rn之后我怀疑是 IRP_MJ_CREATE 不被底层成功处理。所以我又添加了一个后处理操作来获得处理后的结果。rn[code=c]rnIoSetCompletionRoutine(...,CreateComplete,.....);rn[/code]rn后处理操作发现 pIrp->IoStatus.Status 为STATUS_SUCCESS,的确是成功了。rnrn为什么会这样子??rn本来一切正常,但是重启后就不行了。能收得到 IRP_MJ_CREATE 消息,却收不到 IRP_MJ_READ 。
键盘过滤驱动 windows内核驱动开发
可以实现对<em>键盘</em>录入信息的<em>过滤</em>!查看想看的信息!
Windows驱动学习(五)-- 键盘过滤
教程参考自:https://www.bilibili.com/video/av26193169/?p=4 代码地址:https://github.com/G4rb3n/Windows-Driver/tree/master/MT-KillProcess 1. 概述 跟调试应用层程序不同,<em>驱动</em>不稳定,可能会导致蓝屏,所以我们不能在本机调试。一般的操作是在一个虚拟机中加载<em>驱动</em>,然后通过串口对该虚拟机的驱...
键盘过滤驱动 获取键盘按键
把别人nt的<em>键盘</em><em>过滤</em><em>驱动</em>改成了wdm的,刚开始觉得很简单,但还是遇到各种问题,呵呵,学习!!学习!!
键盘过滤驱动实现快捷键
想写一个<em>键盘</em><em>过滤</em><em>驱动</em>,实现快捷键的功能,比如说按F12键打开我的电脑等。rn现在问题是能截获到按下F12的事件,但是怎样在<em>驱动</em>中实现打开我的电脑?rn是不是向win32.sys发送irp实现?望高手指导!
键盘过滤驱动的一段代码
kbdclass是管理<em>键盘</em>输入输出的<em>驱动</em>,无论是usb<em>键盘</em>还是ps/2还是什么没见过的接口,最后数据都要流入这个<em>驱动</em>,所以实现<em>键盘</em>的<em>过滤</em>最简单的方法是挂载kbdclass,对其IRP_MJ_READ操作进行<em>过滤</em>。
wdk中的键盘过滤驱动
wdk中的<em>键盘</em><em>过滤</em><em>驱动</em> wdk中的<em>键盘</em><em>过滤</em><em>驱动</em> wdk中的<em>键盘</em><em>过滤</em><em>驱动</em>
关于键盘驱动过滤的问题
《Windows<em>驱动</em>开发技术详解》一书中提到,rnWindows<em>键盘</em><em>驱动</em>创建的设备对象叫做\Device\KeyboardClass0,要<em>过滤</em><em>键盘</em><em>驱动</em>,只要在其之上挂载一个自己的<em>过滤</em><em>驱动</em>即可。rn[code=c]status = IoAttachDevice(device,&UnicodeString,&devExt->TopOfStack);[/code]rnrn我有一个问题,比如说笔记本电脑,自带一个<em>键盘</em>,我再外接两个<em>键盘</em>,一个正常使用,另一个作为<em>过滤</em>实验使用。那么三个<em>键盘</em><em>驱动</em>创建的设备对象都是KeyboardClass0吗?rnrn如果我只是想<em>过滤</em>试验用的<em>键盘</em><em>驱动</em>怎么办。
键盘过滤驱动蓝屏问题
<em>键盘</em>的<em>驱动</em>程序为 //Device//keyboardClass0 在向<em>键盘</em><em>驱动</em>挂载<em>过滤</em><em>驱动</em>时使用 IoAttachDevice挂载<em>过滤</em><em>驱动</em>时,会在<em>驱动</em>加载时就蓝屏 改正方法 使用 IoAttachDeviceToDeviceStack解决了问题     RtlInitUnicodeString(&ntUnicodeString, L"\\Device\\KeyboardCla
动态加载键盘过滤驱动的问题
在DDK中我学winio源码一样创建一个dll来动态加载<em>键盘</em><em>过滤</em><em>驱动</em>kbfiltr.sys,可是总是在StartService时出错,错误号为ERROR_SERVICE_DISABLED,可换成winio.sys就行了。我似乎看到过<em>键盘</em><em>驱动</em>好像是不能动态加载的,可又不确定。rn所以总结一下,我想知道是不是可以动态加载<em>键盘</em><em>过滤</em><em>驱动</em>,如何加载呢?rn真的希望好心的高手们能指点一下我,谢谢。
键盘过滤驱动双机调试
前面发了一贴,没人问津,再发一贴,等待大大们来指点下rn原帖:[url=http://topic.csdn.net/u/20110516/16/d9f32437-7c3f-42fb-8f3b-df0d0ff06c1f.html]寒江独钓 <em>键盘</em><em>过滤</em><em>驱动</em>[/url]rn下面是调试的截图,获取kdbclass<em>驱动</em>对象设备列表为空rn[img=http://hi.csdn.net/attachment/201105/23/78643_1306126355tNdn.jpg][/img]rnrn由于设备列表为空,下面绑定的代码没有执行rn[img=http://hi.csdn.net/attachment/201105/23/78643_1306126356kmpF.jpg][/img]rnrn进入系统后,用devicetree 查看,可以看到kdbclass下面有两个设备,<em>驱动</em>对象的地址和我图1截图中的地址是一样的rn[img=http://hi.csdn.net/attachment/201105/23/78643_1306126358bQYB.jpg][/img]rnrn不明白为什么会这样,设置问题还是什么?rn这样我都调试不了蓝屏代码。
windows过滤驱动
讲解<em>windows</em>微<em>过滤</em>文件系统<em>驱动</em>,主要是应用信息安全方面,例如硬盘上的文件的防拷贝,防修改等功能。
windows文件过滤驱动
文件<em>过滤</em><em>驱动</em>,文件<em>过滤</em><em>驱动</em>,文件<em>过滤</em><em>驱动</em>
windows文件驱动键盘驱动
<em>windows</em>下的文件<em>过滤</em><em>驱动</em>,<em>键盘</em><em>过滤</em><em>驱动</em>,
Windows 文件系统过滤驱动开发教程
楚狂生的教程,Windows 文件系统<em>过滤</em><em>驱动</em>开发教程,讲得很经典
Windows文件系统过滤驱动开发教程
Windows文件系统<em>过滤</em><em>驱动</em>
windows文件过滤驱动问题
写了一个简单的文件<em>过滤</em><em>驱动</em>,ADDDevice中创建rn//创建设备名称rnRtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");rn status = IoCreateDevice(DriverObject,rn sizeof(ST_PSVFLT_EXTENSION),rn &devName,rn FILE_DEVICE_DISK,rn FILE_DEVICE_SECURE_OPEN,rn FALSE,rn &filterDeviceObject);rn创建符号链接:rnRtlInitUnicodeString(&symLinkName,L"\\Device\\FileFilter");rnstatus = IoCreateSymbolicLink( &symLinkName,&devName );rnrn应用程序向该<em>驱动</em>发ioctl,首先createfile得到handlernHANDLE hDevice = CreateFile("\\\\.\\FileFilter", rn GENERIC_READ | GENERIC_WRITE,rn 0, // share mode nonern NULL, rn OPEN_ALWAYS,rn FILE_ATTRIBUTE_NORMAL,rn NULL ); rn得到错误码2 找不到指定路径rn但是用winobj查看,符号链接创建成功,如图rn[img=https://img-bbs.csdn.net/upload/201407/01/1404209045_263358.png][/img]rn不知道是什么原因不能createfile成功,求指导。
windows文件驱动irp过滤
最近在搞一个U盘防护功能,和网上的filemon思路差不多,rnrn1. 主要是捕获新增卷盘符,比如F:\,这是U盘的盘符,rn2. 然后<em>驱动</em>层在把新增的盘符hook里面的操作,新增<em>驱动</em>设备和处理irp代码。rnrn可是这会有一个bug产生,就是在磁盘管理里面打开U盘会使防护失效,rn1. 操作如下,打开磁盘管理,打开U盘,提示打不开,此时功能正常,rn2. 然后重新插拔U盘,再到磁盘管理界面刷新一下,U盘就可以打开了,rnrn从现象可以分析得出,防护U盘的<em>驱动</em>设备栈里面<em>过滤</em>设备对象被Detach了,收不到irp,故无法防护。rnrnrn请教下有没有什么办法可以解决?同时我也想问下有没有办法知道自己设备栈的对象被Detach了,只要能知道,重新再hook再Attach一次就可以了,或者有什么其它办法可以解决。。。求救![img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/18.gif][/img]
初学驱动开发-windows驱动-鼠标过滤驱动
入口DriverEntry和<em>键盘</em><em>过滤</em>类似,在Attach鼠标<em>驱动</em>有些区别 直接上代码: 有个问题:加载鼠标<em>过滤</em><em>驱动</em>后提示“”连接系统上的设备没有发挥作用“”-虽不影响使用但会影响<em>过滤</em><em>驱动</em>的卸载,希望某天有大神求解
Windows文件系统过滤驱动开发教程和基于TDI的文件过滤驱动
文中详细讲解了Windows文件系统<em>过滤</em><em>驱动</em>开发教程和基于TDI的文件<em>过滤</em><em>驱动</em>
键盘过滤驱动改键程序
<em>键盘</em><em>过滤</em><em>驱动</em>实现的改键,屏蔽按键功能,新手刚自学的<em>驱动</em>开发,高手请略过,
ring3如何调用键盘过滤驱动
如题,这个<em>键盘</em><em>过滤</em><em>驱动</em>里生成了很多设备,这些设备到绑定到了Kdbclass上的设备上,在ring3如何使用这个<em>驱动</em>
键盘过滤驱动卸载时,系统蓝屏
由于不可重现,所以,暂时还没有拿到DUMP文件.rn下面是卸载的代码,麻烦大神帮着看一下.rn我找了好久,也没有发现哪块有问题.rnPS: 卸载的时候,都会调用哪些个函数?IRP_MJ_POWER这个例程只是关机的时候,才会被调用吗/rn[code=c]rnrnVOID ClearPendingIrp(IN PDRIVER_OBJECT pDrvObj,IN BOOLEAN cancel)rnrn PDEVICE_OBJECT pDevObj = pDrvObj->DeviceObject;rn PDEVICE_EXTENSION pDevExt = NULL;rn while (pDevObj)rn rn pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;rnrn if (pDevExt->et == et_normal)rn rn if (cancel && pDevExt->pIrp)rn rn BOOLEAN bCancel = IoCancelIrp(pDevExt->pIrp);rn#ifdef DBGrn KdPrint(("IoCancelIrp Result:%d\n",bCancel));rn#endifrn rn pDevExt->pIrp = NULL;rn rnrn pDevObj = pDevObj->NextDevice;rn rnrnrnVOID DetachDevices(IN PDEVICE_OBJECT pDevObj)rnrn PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;rn __tryrn rn __tryrn rn if (pDevExt->et == et_filter)rn rn PFILTER_DEVICE_EXTENSION pFilterExt = (PFILTER_DEVICE_EXTENSION)pDevExt;rn IoDetachDevice(pFilterExt->pTargetDeviceObject);rn if (pFilterExt->pIrp)rn rn IoCancelIrp(pFilterExt->pIrp);rn rn rn else if (pDevExt->et == et_normal)rn rn if (pDevExt->pData)rn rn ReleaseRecorder(pDevExt->pData);rn rn rn else if (pDevExt->et == et_none)rn rn PFILTER_DEVICE_EXTENSION pFilterExt = (PFILTER_DEVICE_EXTENSION)pDevExt;rn IoDetachDevice(pFilterExt->pTargetDeviceObject);rn rnrn IoDeleteDevice(pDevObj);rn rn __except(EXCEPTION_EXECUTE_HANDLER)rn rn __finallyrnrnrnVOID DriverUnload(IN PDRIVER_OBJECT pDrvObj)rnrn PDEVICE_OBJECT pDevObj = NULL;rn PDEVICE_OBJECT pNextDevObj = NULL;rn UNICODE_STRING ustrSymName = 0;rn rn RtlInitUnicodeString(&ustrSymName,DOS_DEVICE_NAME_W);rn IoDeleteSymbolicLink(&ustrSymName);rn rn UNREFERENCED_PARAMETER(pDrvObj);rn KdPrint(("Driver Unloading...\n"));rnrn ClearPendingIrp(pDrvObj,TRUE);rnrn KdPrint(("DriverUnload: ClearPendingIrp.\n"));rnrn pDevObj = pDrvObj->DeviceObject;rn rn KdPrint(("DriverUnload: Begin DetachDevices.\n"));rnrn while (pDevObj)rn rn pNextDevObj = pDevObj->NextDevice;rn DetachDevices(pDevObj);rn pDevObj = pNextDevObj;rn rnrnrn KdPrint(("DriverUnload: End DetachDevices.\n"));rnrn ASSERT(!pDrvObj->DeviceObject);rn rn KdPrint(("Driver Unloaded.\n"));rnrnrn...........rnrn[/code]
WDF 键盘过滤驱动 IRP 问题
WDF <em>键盘</em>鼠标 <em>过滤</em><em>驱动</em>中 对<em>键盘</em>消息 诸如 输入NUM_1 输出NUM-8 进行修改是在哪里? 是不是在某个 IRP? 是的话 在哪一个
键盘过滤驱动通过注册表加载.
有一个<em>键盘</em><em>过滤</em><em>驱动</em>,在XP下,想实现不用INF直接通过注册表加载,rn 现在在services下面添写了信息rn[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ltkbfiltr]rn"DisplayName"="keyboard filter example"rn"ErrControl"=dword:00000000rn"Group"="Keyboard Port"rn"ImagePath"="system32\DRIVERS\ltkbfiltr.sys"rn"Start"=dword:00000003rn"Tag"=dword:00000005rn"Type"=dword:00000001rn然后我在[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0303\4&bf7c77b&0]rn下面加了UpperFilters:rn..rn"Driver"="4D36E96B-E325-11CE-BFC1-08002BE10318\\0001"rn"Class"="Keyboard"rn"Mfg"="(标准<em>键盘</em>)"rn"DeviceDesc"="标准 101/102 键或 Microsoft 自然 PS/2 <em>键盘</em>"rn"UpperFilters" = "ltkbfiltr"rnrn之后重启用devicetree没有发现此<em>过滤</em><em>驱动</em>,设备管理器中<em>键盘</em>设备显示黄色感叹号,为啥呢
PS/2键盘上层过滤驱动设计
各位高手:rn 在设计PS/2<em>键盘</em>上层<em>过滤</em><em>驱动</em>时,我碰到了一点麻烦:rn 我打算在<em>过滤</em><em>驱动</em>中<em>过滤</em>掉特定的键,在win2000 DDK目录..\NTDDK\src\input\kbfiltr中有例程,我将自己的代码加到kbfiltr.c的KbFilter_ServiceCallback函数中,但是我没有<em>过滤</em>掉任何键.rn 急切的盼望各位的帮忙!!!rn 下面是我加的代码:rn////////////////////////////////////////////////////////////////////////////////rn//我自己写的函数rn//待<em>过滤</em>的键的扫描码 "a"(MakeCode=0x1C; BreakCode=0xF0,0x1c;)rnint Filter(PKEYBOARD_INPUT_DATA InputDataStart,rnPKEYBOARD_INPUT_DATA InputDataEnd)rnrn//标志位,用来标志是否找到了扫描码rnint CodeSign[3];rn//遍历InputDataBuffer的指针rnPKEYBOARD_INPUT_DATA i=0x0;rnint j=0;rn//最终的找到了扫描码的标志rnint FilterProcess=0;rnint InputDataSize=sizeof(KEYBOARD_INPUT_DATA);rn//初始化标志位rnfor(j=0;jMakeCode==0x1C) && (i->Flags==KEY_MAKE)))rncontinue;rnelsernCodeSign[0]=1;rnif (!((i->MakeCode==0xF0) && (i->Flags==KEY_BREAK)))rncontinue;rnelsernCodeSign[1]=1;rnif (!((i->MakeCode==0x1C) && (i->Flags==KEY_BREAK)))rncontinue;rnelsernrnCodeSign[2]=1;rnbreak;rnrnrn//设置标志位rnfor(j=0;j<=2;j++)rnFilterProcess&=CodeSign[j];rn//<em>过滤</em>之rnif (FilterProcess)rnrnRtlZeroMemory(i-2*InputDataSize,3);rnreturn 0;rnrnreturn 1;rnrn/////////////////////////////////////////////////////////////////////////////////
win10系统 使用键盘过滤驱动问题
[size=18px]为什么在win10系统下使用<em>键盘</em><em>过滤</em><em>驱动</em>,在卸载<em>驱动</em>后 会导致原有<em>键盘</em>无法输入,然而代码在xp win7下均正常加载与卸载,求大神指点![/size]
关于键盘过滤驱动的扫描码
今天学习写<em>键盘</em><em>过滤</em><em>驱动</em>。rn已经得到KEYBOARD_INPUT_DATA这个结构了,可是不知道扫描码如何转换成可读字符。希望高手讲解一下。谢谢了!!!rnrn还有,KEYBOARD_INPUT_DATA里面的MakeCode扫描码和应用层的扫描码一样吗?
问一个键盘过滤驱动的问题
想把<em>键盘</em>中的win键屏蔽掉,但是实际效果确实win键一直被系统认为是按下状态。比如在按了win键过后,按R就是运行,按L就是注销。代码如下,请高人指点rn[code=C/C++]NTSTATUS OnReadCompletion(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp, IN PVOID Context) rnrn int numKeys;rn int i;rn if(pIrp->IoStatus.Status == STATUS_SUCCESS) rn rn PKEYBOARD_INPUT_DATA keys = (PKEYBOARD_INPUT_DATA)pIrp->AssociatedIrp.SystemBuffer;rn rn numKeys = pIrp->IoStatus.Information / sizeof(KEYBOARD_INPUT_DATA);rn for(i = 0; i < numKeys; i++)rn rn if (keys[i].MakeCode ==0x5b||keys[i].MakeCode ==0x5c ) rn rn keys[i].MakeCode = 0x00; //rn rn rn rn ......rn [/code]
键盘过滤驱动导致R3假死
写的<em>键盘</em><em>驱动</em>都是抄袭网上的,做了一点小修改,只是为了屏蔽特定按键。通过IOCTL与R3通信,现在遇到问题是:能够实现屏蔽与开启功能,但是R3一旦调用DeviceIoControl函数成功与<em>驱动</em>同喜 并且返回后,R3不能退出。一直在哪儿,任务管理器等均无法结束此进程。特此求教,谢谢rn详细代码如下,谢谢帮忙解决下rn由于最多1W字,全部代码贴不下,值能给出关键的地方,全部代码在看雪rn[url=http://bbs.pediy.com/showthread.php?p=1281505#post1281505][/url]rn谢谢大伙儿rn[code=c]void TestKbdFilter( char c )rnrn HANDLE hsys = INVALID_HANDLE_VALUE;rn DWORD dwRet = 0;rn hsys = CreateFile( _T("\\\\.\\KbdFilter"), GENERIC_READ | GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );rn if ( hsys == INVALID_HANDLE_VALUE )rn rn coutDeviceExtension; rn int numKeys, i;rn KIRQL IrqLevel;rn rn IrpSp = IoGetCurrentIrpStackLocation( Irp );rnrn if ( Irp->IoStatus.Status != STATUS_SUCCESS )rn rn KdPrint( ( "ntStatus:0x%x", Irp->IoStatus.Status ) );rn goto __RoutineEnd;rn rnrn //rn // 系统在 SystemBuffer 中保存按键信息rn //rn KeyData = Irp->AssociatedIrp.SystemBuffer;rn if ( KeyData == NULL )rn rn KdPrint( ( "KeyData is NULL.\r\n" ) );rn goto __RoutineEnd;rn rnrn //rn // 得到按键数rn //rn numKeys = (int)(Irp->IoStatus.Information / sizeof( KEYBOARD_INPUT_DATA ));rn if ( numKeys < 0 )rn rn KdPrint( ( "numKeys less zero.\r\n" ) );rn goto __RoutineEnd;rn rnrn //rn // 使用 0 无效扫描码替换,屏蔽预定义的按键rn //rn for ( i = 0; i < numKeys; i++ )rn rn if( g_bDisableKbd )rn rn if ( IsFilterKey( KeyData[i].MakeCode ) )rn rn KdPrint( ( "This key [0x%02x] is disabled.\r\n", KeyData[i].MakeCode ) );rn KeyData[i].MakeCode = 0;rn rn elsern rn KdPrint( ( "Key - ScanCode[0x%02x].\r\n", KeyData[i].MakeCode ) );rn rn rn rn__RoutineEnd : rnrn if ( Irp->PendingReturned )rn rn IoMarkIrpPending( Irp );rn rn //rn // 将 IRP 计数器减一,为支持 SMP 使用自旋锁rn //rn KeAcquireSpinLock( &KeyExtension->SpinLock, &IrqLevel );rn InterlockedDecrement( &KeyExtension->IrpsInProgress );rn KeReleaseSpinLock( &KeyExtension->SpinLock, IrqLevel );rnrn return Irp->IoStatus.Status ;rn rn[code=c]rnNTSTATUS DriverEntry( IN PDRIVER_OBJECT KeyDriverObject, IN PUNICODE_STRING RegistryPath )rnrn rn UNICODE_STRING KeyDeviceName; rn PDRIVER_OBJECT KeyDriver; rn PDEVICE_OBJECT UsbDeviceObject;rn PDEVICE_OBJECT pDevObjOut;rn NTSTATUS ntStatus; rn //ULONG i; rnrn UNICODE_STRING ustrLinkName;rn UNICODE_STRING ustrDevName;rn PDEVICE_OBJECT pDevObj;rnrn PDEVICE_EXTENSION pDevExt = NULL;rnrn //rn // 这里没有<em>过滤</em>其他例程,仅处理了按键操作。这样处理会禁止rn // 休眠。因在锁定时不允许休眠,所以也就无须处理其他例程rn //rn rn //rn // 保存设备名,调试使用rn //rn rn WCHAR szDeviceName[MAXLEN + MAXLEN] = 0;rnrn //rn // 先尝试获得 USB <em>键盘</em>设备对象,如果成功则挂接 USB <em>键盘</em>rn //rn // 注意:因为 USB <em>键盘</em>设备名不固定,且即使得到名称也无法rn // 使用 IoGetDeviceObjectPointer() 函数根据设备名称得到其rn // 设备对象,所以这里我们只能自己枚举 USB 设备栈,并得到rn // USB <em>键盘</em>设备来进行挂接rn //rnrnrn ntStatus = GetUsbKeybordDevice( &UsbDeviceObject );rn if ( NT_SUCCESS( ntStatus ) && UsbDeviceObject != NULL )rn rn //rn // 调试使用,USB <em>键盘</em>设备 kbdhid 没有设备名只有<em>驱动</em>名rn // 所以这里打印为空rn //rn RtlInitUnicodeString( &KeyDeviceName, szDeviceName ); // USB KEYBOARDrn KdPrint( ( "KeyDeviceName:%S.\r\n", KeyDeviceName.Buffer ) );rnrn //rn // 挂接 USB <em>键盘</em>设备rn //rn ntStatus = AttachUSBKeyboardDevice( UsbDeviceObject, KeyDriverObject, &pDevObjOut );rn if ( !NT_SUCCESS( ntStatus ) )rn rn KdPrint( ( "Attach USB Keyboard Device to failed!\r\n" ) );rn return STATUS_INSUFFICIENT_RESOURCES;rn rn KdPrint( ( "pDevExt->TargetDevice = 0x%x.\r\n", ( (PDEVICE_EXTENSION)pDevObjOut->DeviceExtension )->TargetDevice ) );rn rn elsern rn //rn // 如果没有 USB <em>键盘</em>,则尝试挂接 PS/2 <em>键盘</em>设备rn // rn RtlInitUnicodeString( &KeyDeviceName, PS2KEYBOARDNAME ); rn ntStatus = AttachPS2KeyboardDevice( &KeyDeviceName, KeyDriverObject, &KeyDriver, &pDevObjOut );rn if ( !NT_SUCCESS( ntStatus ) || KeyDriver == NULL )rn rn KdPrint( ( "Attach PS2 Keyboard Device to failed!\r\n" ) ) ;rn return STATUS_INSUFFICIENT_RESOURCES;rn rn KdPrint( ( "pDevExt->TargetDevice = 0x%x.\r\n", ( (PDEVICE_EXTENSION)pDevObjOut->DeviceExtension )->TargetDevice ) );rn rnrn KeyDriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;rn KeyDriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose;rn KeyDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchIoctl;rn KeyDriverObject->MajorFunction[IRP_MJ_READ] = KeyReadPassThrough; rn KeyDriverObject->DriverUnload = KeyDriverUnload; rnrn //创建<em>驱动</em>映射名称,用来辅助通信rn RtlInitUnicodeString(&ustrDevName, DEVICE_NAME);rn ntStatus = IoCreateDevice(KeyDriverObject, sizeof(DEVICE_EXTENSION), &ustrDevName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pDevObj);rn KdPrint( ( "[Driver] Device Name %S.\r\n",ustrDevName.Buffer ) );rn if(!NT_SUCCESS(ntStatus))rn rn KdPrint( ( "[Driver] IoCreateDevice = 0x%x\r\n", ntStatus ) );rn return ntStatus;rn rn RtlCopyMemory( pDevObj->DeviceExtension, pDevObjOut->DeviceExtension, sizeof(DEVICE_EXTENSION) );rn RtlInitUnicodeString(&ustrLinkName, LINK_NAME);rn ntStatus = IoCreateSymbolicLink(&ustrLinkName, &ustrDevName); rn if(!NT_SUCCESS(ntStatus))rn rn KdPrint( ( "[Driver] IoCreateSymbolicLink = 0x%x.\r\n", ntStatus ) );rn IoDeleteDevice(pDevObj); rn return ntStatus;rn rn KdPrint( ( "[Driver] SymbolicLink:%S.\r\n",ustrLinkName.Buffer ) );rn return STATUS_SUCCESS;rn [/code]rn[code=c][/code]rnrn
键盘过滤驱动图解赶快瞧一瞧!!!!!
光知道<em>键盘</em><em>过滤</em><em>驱动</em>怎么从网上抄下来。却不知道其原理。想知道就赶快下载吧。
USB键盘过滤驱动应如何编写?
因为想知道获取的<em>键盘</em>数据是哪个<em>键盘</em>发来的(有2个<em>键盘</em>),所以 想写个USB<em>键盘</em><em>过滤</em><em>驱动</em>,在<em>过滤</em><em>驱动</em>中更改<em>键盘</em>码,从而来判断到底是哪个<em>键盘</em>发出的消息。不知道应该如何编写<em>键盘</em><em>过滤</em><em>驱动</em>,我用DriverStudio中自带的usbfilt<em>过滤</em><em>驱动</em>,但是安装后<em>键盘</em>无法使用,有个黄色的感叹号,为什么?
寒江独钓 键盘过滤驱动问题
寒江独钓的<em>键盘</em><em>过滤</em><em>驱动</em> rn[code=C/C++]rn// 初始化一个字符串,就是Kdbclass<em>驱动</em>的名字。rn RtlInitUnicodeString(&uniNtNameString, KBD_DRIVER_NAME); rn // 请参照前面打开设备对象的例子。只是这里打开的是<em>驱动</em>对象。rn status = ObReferenceObjectByName ( rn &uniNtNameString, rn OBJ_CASE_INSENSITIVE, rn NULL, rn 0, rn IoDriverObjectType, rn KernelMode, rn NULL, rn &KbdDriverObject rn ); rn // 如果失败了就直接返回rn if(!NT_SUCCESS(status)) rn rn KdPrint(("MyAttach: Couldn't get the MyTest Device Object\n")); rn return( status ); rn rn elsern rn // 这个打开需要解应用。早点解除了免得之后忘记。rn ObDereferenceObject(DriverObject);rn rnrn // 这是设备链中的第一个设备 rn pTargetDeviceObject = KbdDriverObject->DeviceObject;rn // 现在开始遍历这个设备链rn while (pTargetDeviceObject) rn rn //,...............rn rn[/code]rnrn这段绑定代码, 在执行到 while (pTargetDeviceObject) , 由于 pTargetDeviceObject 为空直接退出了。rnObReferenceObjectByName 这个函数调用是成功的, 为什么会这样呢,抓狂了。rn
关于动态卸载键盘过滤驱动
一个<em>键盘</em><em>过滤</em><em>驱动</em>支持动态卸载:rnrn// 原作者 : sinisterrnVOIDrnKeyDriverUnload( PDRIVER_OBJECT KeyDriver )rnrnPDEVICE_OBJECT KeyFilterDevice ; rnPDEVICE_OBJECT KeyDevice ;rnPDEVICE_EXTENSION KeyExtension; rnPIRP Irp;rnNTSTATUS ntStatus;rnrnKeyFilterDevice = KeyDriver->DeviceObject; rnKeyExtension = ( PDEVICE_EXTENSION ) KeyFilterDevice->DeviceExtension; rnKeyDevice = KeyExtension->TargetDevice; rnrnIoDetachDevice( KeyDevice ); rnrn//rn// 如果还有 IRP 未完成,且当前 IRP 有效则尝试取消这个 IRPrn[color=#FF0000]//__start :[/color]rnif ( KeyExtension->IrpsInProgress > 0 && KeyDevice->CurrentIrp != NULL )rnrn if ( CancelKeyboardIrp( KeyDevice->CurrentIrp ) )rn rn //rn // 成功则直接退出删除<em>键盘</em><em>过滤</em>设备rn //rn DbgPrint( "CancelKeyboardIrp() is ok\n" );rn goto __End;rn rnrnrn//rn// 如果取消失败,则一直等待按键rn//rnwhile ( KeyExtension->IrpsInProgress > 0 )rnrn DbgPrint( "Irp Count:%d\n", KeyExtension->IrpsInProgress );rn //此处是不是应添加个转向__start的语句?rnrnrn__End:rnIoDeleteDevice( KeyFilterDevice ); rnrnreturn ;rn rnrn__start的标号是我设想的,原文中并没有。卸载例程检查是否有IRP未完成且IRP有效则调用IoCancelIrp尝试取消这个IRP,如果取消IRP失败则等待直到有下一次IRP然后取消。当重新尝试取消时得转到__start处吧?我怀疑原文在转载时有错误地方。rnrnrnrn原文地址:rnhttp://www.ecjtu.org/forum/htm_data/12/0703/10783.html rn
支持 PS-2 与 USB 的键盘过滤驱动
打开之后可以得到相关的<em>键盘</em><em>驱动</em>程序的设计方法
键盘过滤
这几天心态崩了 就没怎么继续撸  看pwn看的心态有点崩  然后 看<em>驱动</em>看不下了  所以 划了一天的水。。 然后这次写的是  <em>键盘</em>的<em>过滤</em> 这次  看的是   资料是   <em>windows</em>黑客技术编程   其实这个 我感觉 还是比较好理解的 首先是  一个 扩展设备    typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pAttachDe...
Windows虚拟鼠标键盘驱动
Windows虚拟鼠标<em>键盘</em><em>驱动</em> 完整源代码包含visual studio项目文件
Windows驱动之编写键盘记录器
【1】方式:替换Kbdclass<em>驱动</em>的ReadFile IRP函数处理指针 编写.sys文件: 头文件: #pragma once //只编译1次头文件 #include //<em>驱动</em>函数头文件,类似于Win
vc++编写的键盘过滤驱动记录键盘信息
很简易的一个 vc++ 编写的<em>键盘</em><em>过滤</em><em>驱动</em> 代码及其文件
键盘过滤驱动只响应键盘,其他都死机了,为什么
rnNTSTATUS KMRead(DEVICE_OBJECT *DeviceObject, IRP *Irp)rnrn PMY_DEVICE_EXTENSION myDeviceExtension;rnKEVENT event;rn PIO_STACK_LOCATION currentIrpStack; rn NTSTATUS ntStatus = STATUS_SUCCESS;rn //KdPrint(("KMRead.\n"));rn PUCHAR buff;rn int len;rn myDeviceExtension = (PMY_DEVICE_EXTENSION)DeviceObject->DeviceExtension;rn currentIrpStack = IoGetCurrentIrpStackLocation(Irp); rn IoCopyCurrentIrpStackLocationToNext(Irp); rn /* 只有<em>驱动</em>可以保证在完成例程被调用之前不被卸载的情况下,可以使用 IoSetCompletionRoutine,rn 如果你不能保证,那么就需要用 IoSetCompletionRoutineEx,让内核来使<em>驱动</em>不被卸载*/rn /*IoSetCompletionRoutine(Irp,rn KMReadCompletion,rn NULL,rn TRUE,rn TRUE,rn TRUE);*/rnrnrnrnIoSetCompletionRoutine(Irp,KMReadCompletion,&event,TRUE,TRUE,TRUE);rn //初始化事件rn KeInitializeEvent(&event, NotificationEvent, FALSE);rn rn ntStatus =IoCallDriver(myDeviceExtension->TargetDevice, Irp);rn rnif (ntStatus == STATUS_PENDING)rn rnrn KdPrint(("IoCallDriver return STATUS_PENDING,Waiting ...\n"));rn KeWaitForSingleObject(&event,Executive,KernelMode ,FALSE,NULL);rnrnif (NT_SUCCESS(Irp->IoStatus.Status)) rn // 由于设备标志为 DO_BUFFERED_IO, 内核分配了该缓冲区rn buff = (PUCHAR)Irp->AssociatedIrp.SystemBuffer;rn // 返回值一般都保存在 Information 中,即长度rn len = Irp->IoStatus.Information;rnrnrnrn if (buff[4] == 0) rn /* <em>键盘</em>被按下 */rn switch (buff[2]) rn rn case 0x3A:rn g_caps = (g_caps == 1)?0:1;rn break;rn case 0x2A:rn case 0x36:rn g_shift = 1;rn break;rn case 0x45:rn g_num = (g_num == 1)?0:1;rn break;rn default:rn KMPrintKey(buff[2]);rn break;rn rn else if (buff[4] == 1) rn rn /* <em>键盘</em>被释放 */rn switch (buff[2]) rn case 0x2A:rn case 0x36:rn g_shift = 0;rn break;rn default: break;rn rn rn rnrn ntStatus = Irp->IoStatus.Status;rn rn IoCompleteRequest (Irp, IO_NO_INCREMENT);rnrn KdPrint(("DriverB:Leave B HelloDDKRead\n"));rnrn return ntStatus;rnrnrnrnNTSTATUS KMReadCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)rnrn rnif (Irp->PendingReturned == TRUE) rn rn //设置事件rn KeSetEvent((PKEVENT)Context,IO_NO_INCREMENT,FALSE);rn rnrn return STATUS_MORE_PROCESSING_REQUIRED;rnrnrnrnrnrnrnvoid KMPrintKey(UCHAR sch)rnrnrn rn IO_STATUS_BLOCK ioStatus;rn OBJECT_ATTRIBUTES oa;rn // UNICODE_STRING usPath;rn UCHAR ch = 0;rn UNICODE_STRING usBuff;rn UNICODE_STRING usCopyDes;rn PUCHAR usCopyDes1;rnint len=sizeof(UCHAR);rn //WCHAR *UnicodeString = L"UnicodeString";rnrn if ((sch < 0x47) || ((sch >= 0x47 && sch < 0x54) && g_num==0)) rn ch = asciiTbl[sch];rn if(g_shift && g_caps)rn ch = asciiTbl[sch+84*3];rn else if(g_shift==1)rn ch = asciiTbl[sch+84*2];rn else if(g_caps==1)rn ch = asciiTbl[sch+84];rn rnrn if(ch==0x08)rn rn //DbgPrint("退格");rn rnrn if (ch >= 0x20 && ch < 0x7F)rn rn //DbgPrint("%C",ch);rn //DbgPrint("美女123 %C",ch);rnrnrnrnrnusCopyDes1= (PUCHAR)ExAllocatePool(PagedPool,len);rn RtlFillMemory(usCopyDes1,len,ch);rn if(NT_SUCCESS(ntStatus))rnrnZwWriteFile(rn hFile,rn NULL,rn NULL,rn NULL,rn &ioStatus,rn usCopyDes1,rn len,rn NULL,rn NULL);rnrnrnExFreePool(usCopyDes1);rnrnrn rnrn[/code]rnrnrnrnrn//这样,我把<em>过滤</em>的完成例程改为IoCallDriver异步的,就是IoCallDriver返回STATUS_PENDING就只响应<em>键盘</em>,其他都死机了。假如改回IoCallDriver同步的就没事。为什么。
wdm驱动-过滤驱动
wdm<em>驱动</em>,包括功能<em>驱动</em>和附在它上面的<em>过滤</em><em>驱动</em>(上层<em>过滤</em><em>驱动</em>)。一个很简单的例子。
Windows 文件系统过滤驱动开发教程(第二版)
Windows 文件系统<em>过滤</em><em>驱动</em>开发教程-新版,详细讲述了MINIFILTER开发各步骤
Windows文件系统过滤驱动开发教程(第二版)
Windows文件系统<em>过滤</em><em>驱动</em>开发教程(第二版)
windows分层过滤驱动再理解
最近在看rootkits相关的资料,无意间又翻到了<em>驱动</em><em>过滤</em>类的知识。分层<em>驱动</em>程序不仅可以截获数据,也可以在传递数据之前对其进行修改。IRP和堆栈位置学习<em>windows</em>下的<em>驱动</em>,IRP一定是重中之重,他其实就相当于<em>windows</em>应用层下的消息,传递着各个操作的命令。先来看看IRP的结构: 结合上面的结构图,定义如下:typedef struct _IRP { PMDL MdlAddress
Windows文件系统过滤驱动开发教程(2).doc
Windows文件系统<em>过滤</em><em>驱动</em>开发教程 原作:楚狂人
C++ 多线程 COM windows文件过滤驱动
包含以下基本 More Effective+C++.pdf Effective+C++.pdf c++ primer plus 4th edition.chm Inside COM.pdf 多线程编程指南.pdf multiple thread.pdf Win32多线程编程.pdf 专家级多线程技术.Eng.pdf Windows文件系统<em>过滤</em><em>驱动</em>开发教程(第二版).pdf 免费送大家
Windows文件系统过滤驱动开发教程 2nd.zip
详细的讲解的关于<em>过滤</em><em>驱动</em> 楚狂人-2007-上海 (MSN:walled_river@hotmail.com)
《Windows 文件系统过滤驱动开发教程(第二版)》
里面详细的讲解的关于<em>过滤</em><em>驱动</em>的知识点,对于学习这方面的小伙伴们很好帮助。
windows 文件系统过滤驱动教程与相关文档!!!
<em>windows</em> 文件系统<em>过滤</em><em>驱动</em>教程与相关文档!!!!!!
Windows过滤驱动开发教程-楚狂人
Windows<em>过滤</em><em>驱动</em>开发教程-楚狂人,<em>过滤</em><em>驱动</em>算是<em>驱动</em>程序中最难的了吧,但是话说回来只要是入门了,学会了,自己勤奋不懈,就没有难的东西。俗话说:会的不难男的不会是吧!!
windows防火墙驱动过滤模块之间的关系?
以下是个人观点,请各位大神指点。。rnrn1.防火墙<em>驱动</em>只是提供一个应用层软件和其通信的中间层。主要功能还是在<em>过滤</em>方式中得到体现(比如在通信中加入验证模块)rn 防火墙<em>驱动</em>只是能决定你软件的效率而已。不知理解是否正确。rnrn2.还有就是<em>驱动</em>编写中只是线的地址不同 64位机器和32位机器 走线不同。地址长度不同 还有其他的原因吗?rn rn
Windows 文件过滤驱动经验总结.txt
Windows 文件<em>过滤</em><em>驱动</em>经验总结.txt
文件过滤系统框架 Windows文件系统过滤驱动开发教程
01.Windows文件系统<em>过滤</em><em>驱动</em>开发教程(1) .doc 02.Windows文件系统<em>过滤</em><em>驱动</em>开发教程(2) .do 03.Windows文件系统<em>过滤</em><em>驱动</em>开发教程(3) .doc 04.Windows文件系统<em>过滤</em><em>驱动</em>开发教程(4).doc 05.Windows文件系统<em>过滤</em><em>驱动</em>开发教程(5).doc 06.Windows文件系统<em>过滤</em><em>驱动</em>程序教程(6).doc 07.Windows文件系统<em>过滤</em><em>驱动</em>程序教程(7). 08.Windows文件系统<em>过滤</em><em>驱动</em>程序教程(8) 09.Windows文件系统<em>过滤</em><em>驱动</em>程序教程(9) 10.Windows文件系统<em>过滤</em><em>驱动</em>程序教程(10).doc 11.Windows文件系统<em>过滤</em><em>驱动</em>开发教程(11) .doc
键盘驱动
矩阵<em>键盘</em>的函数需要的赶紧下载吧 很合适用就是这样
键盘过滤动态库
哪位大神有<em>键盘</em><em>过滤</em>的动态库啊! 就是能屏蔽win alt+tab alt+esc alt+f4 ctrl+alt+delete ctrl+esc的组合键 谢谢各位大神啦
keyfilter键盘过滤
读取<em>键盘</em>按键的简单<em>驱动</em>,另有应用程序显示出按键信息.自己写的,可以运行。
【原】键盘过滤函数
'因为程序经常用到<em>键盘</em><em>过滤</em>功能,所以自己编写了一个<em>键盘</em><em>过滤</em>函数与大家分享。rnrnrn'窗体rnPrivate Sub Text1_KeyPress(KeyAscii As Integer)rn rn '0-9、Ctrl+C、Ctrl+V、Ctrl+Xrn CheckKeyAscii KeyAscii, KeyChar.keyDigit & _rn Chr$(KeyChar.keyCtrlC) & _rn Chr$(KeyChar.keyCtrlV) & _rn Chr$(KeyChar.keyCtrlX)rn rnrnEnd Subrnrnrnrn'模块rnrnPublic Enum KeyCharrn rn keyAdd = 107 '+ 加号;正号rn keySubtract = 109 '- 减号;负号rn keyMultiply = 106 '× 乘号rn keyDivide = 111 '÷ 除号rn keyEqual = 61 '= 等于号rn keyLessThan = 60 '< 小于号rn keyMoreThan = 62 '> 大于号rn keyPercent = 37 '% 百分之…rn keyOpenBrace = 123 ' 左花括号rn keyCloseBrace = 125 ' 右花括号rn keyOpenParen = 40 '( 左圆括号rn keyCloseParen = 41 ') 右圆括号rn keyOpenBracket = 91 '[ 左方括号rn keyCloseBracket = 93 '] 右方括号rn keyDot = 46 '. 句号,点rn keyVerticalBar = 124 '| 竖线rn keyReference = 38 '& 引用rn keyPound = 35 '# 井号rn keyBackslash = 92 '\ 反斜线转义符rn keyTilde = 126 '~ 波浪符rn keyComma = 44 ', 逗号rn keyColon = 58 ': 冒号rn keySemicolon = 59 '; 分号rn keyQuestion = 63 '? 问号rn keyExclamationMark = 33 '! 叹号rn keySingleQuotes = 39 '' 单引号rn keyDoubleQuotes = 34 '" 双引号rn rn keyCtrlC = 3 'Ctrl+Crn keyCtrlV = 22 'Ctrl+Vrn keyCtrlX = 24 'Ctrl+Xrn keyCtrlA = 1 'Ctrl+Arn keyBackspace = 8 '退格rn keySpace = 32 '空格rn keyReturn = 13 '回车rn rn keyDigit = "1234567890"rn rnEnd EnumrnrnrnPublic Sub CheckKeyAscii(ByRef ParKeyAscii As Integer, ByVal ParQualifyString As String)rn rn If InStr(ParQualifyString, Chr(ParKeyAscii)) <= 0 Thenrn rn ParKeyAscii = 0rn rn End Ifrn rnEnd Subrnrnrn
键盘过滤驱动程序源代码
一个<em>键盘</em>记录<em>驱动</em>源代码,完整 慎用 支持USB<em>键盘</em>和PS/2<em>键盘</em>
Windows ce kbdmouse.dll 是键盘驱动吗?
Windows ce kbdmouse.dll 是<em>键盘</em><em>驱动</em>吗?
Windows鼠标键盘(PS2)驱动框架
常用的鼠标类型:串口鼠标、PS/2鼠标、USB鼠标(HID)常用的<em>键盘</em>类型:串口<em>键盘</em>、PS/2鼠标、USB<em>键盘</em>(HID)非HID鼠标<em>键盘</em>(PS/2鼠标<em>键盘</em>)物理配置方式上图左边展示了<em>键盘</em>鼠标设备通过独立的控制器连接到系统总线。一种典型的配置由通过i8042控制器操作的PS/2类型<em>键盘</em>,和通过串口操作的串口鼠标组成。上图右边展示了<em>键盘</em>鼠标设备通过集成的<em>键盘</em>鼠标控制器连接到系统总线。一种典型的配置由通...
驱动+过滤驱动DDK驱动源代码
<>一书的CharFilter<em>驱动</em>是用第三方的开发包写的,我将这个<em>驱动</em>改成用DDK开发的,包括CharSample<em>驱动</em>和CharFilter<em>驱动</em>源代码,有兴趣的可以看下<em>过滤</em><em>驱动</em>和<em>驱动</em>例子。
windows7 《寒江独钓》传统键盘过滤驱动学习
本人<em>驱动</em>方面小白一枚,如果有什么不足之处与不正确之处还请各位大佬多多指正。 另外,本篇博客参考了以下博客,非常感谢原作者的分享!我在学习的时候真的受到了很大的帮助! IRP相关: http://blog.csdn.net/whatday/article/details/7106721 http://bbs.fishc.com/thread-59944-1-1.html http://blo
win8键盘过滤驱动:ctrl+space映射为win+space
win8切换输入法是win+空格,这对于从win7过来的选手来说很不方便 我为此做了一个<em>键盘</em><em>过滤</em><em>驱动</em>,可以将ctrl+空格转换成win+空格 这样就可以通过ctrl+空格来切换输入法了 但是有些游戏可能有不兼容的现象(ctrl不自动UP)
怎样写键盘过滤驱动?(功能:键入'A',显示‘B’)
怎样写<em>键盘</em>的<em>过滤</em><em>驱动</em>?(功能:键入'A',显示‘B’)rn不知道这的功能怎样实现?谢谢!
键盘过滤驱动动态卸载,不使用计数
请问下,<em>键盘</em><em>过滤</em><em>驱动</em>动态卸载,不使用计数,有做过的吗?rnrn因为使用计数的话,卸载后还需要再按一下<em>键盘</em>才能成功卸载,不方便。看网上说要自己发送IRP处理,不太会rnrn有解决过这个问题的吗?
键盘驱动原理-驱动入门
<em>键盘</em><em>驱动</em>原理,适合对<em>驱动</em>充满好奇心的朋友,是不可多得的入门例子
那位高手可以做基于内核键盘过滤驱动.
用VB 的api 模拟<em>键盘</em>.鼠标rn玩游戏....rnrn采用了Direct Input的游戏不能够正常..rnrn用基于内核<em>键盘</em>类<em>过滤</em><em>驱动</em>能实现.rnapi 模拟<em>键盘</em>;鼠标.转Direct Input的游戏.rnrn??????????????rnrnrnQQ:441876558rnrn可以付适当费用...rn
USB 鼠标过滤驱动
这是一个用C语言写的USB鼠标<em>过滤</em><em>驱动</em>,接口为DDK,没有采用DriverStudiio
注册表过滤驱动
注册表<em>过滤</em><em>驱动</em>,回调监控,注册表监控,界面输出控制台
过滤驱动设计原则
<em>过滤</em><em>驱动</em>设计原则
u盘驱动过滤
实现了U盘的<em>驱动</em><em>过滤</em>。动态添加<em>驱动</em><em>过滤</em>,同时,实现应用层和<em>驱动</em>层的通信。应用层选择设备列表,对相应的设备添加<em>过滤</em><em>驱动</em>。是很好的示例代码,代码中可能存在部分BUG 但是编译没问题。
linux网络过滤驱动
对上层写虚拟网卡,这个比较容易实现。rn但是,将数据分发到下层网卡,要采用什么样的方法?rnsocket还是调用网卡<em>驱动</em>的接口?rnrn这方面有哪些资料,求达人共享或者求个链接,谢谢。
U盘过滤驱动
小弟正在做一个U盘<em>过滤</em><em>驱动</em>。rn参考的是《Windows内核安全与<em>驱动</em>开发》一书中的DP(D盘还原<em>驱动</em>)<em>驱动</em>。是一个卷设备<em>过滤</em><em>驱动</em>。rn读取数据是时解密,写入数据时加密。rn现在遇到一个问题:rn在win7系统上,格式化为fat系统,则会导致数据被破坏。提示信息是“位置不可用 无法访问E:\xxx\xx 文件或目录损坏切无法读取”文件夹打不开,exe无法运行。在xp系统上没问题。并且ntfs文件系统也没有这个问题。rnrn代码:rnstatic NTSTATUS ReadIrpComp(rn PDEVICE_OBJECT dev,rn PIRP Irp,rn PVOID contextrn )rnrn NTSTATUS ntStatus = STATUS_SUCCESS;rn //irp stack指针rn PIO_STACK_LOCATION Irpsp = NULL;rn //irp中包括的数据地址rn PBYTE sysBuf = NULL;rn PBYTE orgBuf = NULL;rn //irp中的数据长度rn ULONG length = 0;rn //irp要处理的偏移量rn LARGE_INTEGER offset = 0 ;rnrn //将传入的上下文参数转化为一个内核事件对象rn //PKEVENT rEvent = (PKEVENT) context;rnrn if (Irp->PendingReturned)rn rn IoMarkIrpPending(Irp);rn rnrn Irpsp = IoGetCurrentIrpStackLocation(Irp);rnrn ntStatus = Irp->IoStatus.Status;rn if (!NT_SUCCESS(ntStatus))rn rn ntStatus = Irp->IoStatus.Status;rn rnrn if (NULL == Irp->MdlAddress)rn sysBuf = (PBYTE)Irp->UserBuffer;rn elsern sysBuf = (PBYTE)MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);rnrn offset = Irpsp->Parameters.Read.ByteOffset;rn length = Irpsp->Parameters.Read.Length;rnrn //申请内存rn orgBuf = ExAllocatePool(NonPagedPool, length);rn RtlZeroBytes(orgBuf, length);rnrn XORtest(sysBuf, length, orgBuf);rn RtlCopyMemory(sysBuf, orgBuf, length);rnrn ExFreePool(orgBuf);rnrn //设置这个对象,唤醒等待它的进程rn //KeSetEvent(rEvent, IO_NO_INCREMENT, FALSE);rn return STATUS_CONTINUE_COMPLETION;rnrnrn
usb过滤驱动的问题
我做了一个 通用串行总线控制器 的<em>过滤</em><em>驱动</em>,加载之后,插入U盘能够检测到确实加载了我的<em>过滤</em><em>驱动</em>,但是当我往U盘上拷贝文件或者创建文件夹的时候,我的<em>过滤</em><em>驱动</em>就没有反应了,rnrnrn之后,恢复环境,重新把<em>过滤</em><em>驱动</em>加载到disk.sys上,能够确定对U盘的操作都能看到,但是,当我重启机器之后,就蓝屏了,进不了系统,
Sfilter过滤驱动框架
原理Sfilter是设备栈绑定的形式绑定的,<em>驱动</em>自己生成一个设备(<em>过滤</em>设备对象),调用系统提供的绑定API,绑定到目标设备上。并返回一个在未绑定之前目标设备所在设备栈的最顶层设备。这样发往下层的IRP或者发往上层的数据都会被<em>过滤</em>设备截获。实现绑定API: IoAttachDevice() IoAttachDeviceToDeviceStackSafe(2000 SP4以及XP以上) IoAtt
图书馆管理项目下载
这是一个图书馆的管理项目,用jsp+servlet+SQL2008开发 相关下载链接:[url=//download.csdn.net/download/u012420245/6640223?utm_source=bbsseo]//download.csdn.net/download/u012420245/6640223?utm_source=bbsseo[/url]
易语言基础源码下载
易语言基础源码 相关下载链接:[url=//download.csdn.net/download/qq_15556535/7403601?utm_source=bbsseo]//download.csdn.net/download/qq_15556535/7403601?utm_source=bbsseo[/url]
macromedia director mx下载
强大的macromedia director mx,2004强大的多媒体交互设计制作 相关下载链接:[url=//download.csdn.net/download/qq_24664633/8280363?utm_source=bbsseo]//download.csdn.net/download/qq_24664633/8280363?utm_source=bbsseo[/url]
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制
我们是很有底线的