导航:首页 > 净水问答 > 键盘过滤驱动开发教程

键盘过滤驱动开发教程

发布时间:2023-03-21 02:27:19

⑴ 可疑键盘过滤驱动是个什么东东,登录网银时才提示有的。

有些盗号软件是通过记录键盘输入信息来盗取网银信息的,所使用的程序接近键盘驱动,可以键盘过滤驱动就是将这些程序过滤掉,确保安全

⑵ 如何同时过滤USB/PS2键盘驱动

你发错地方了,应该发在编程区的。抱歉帮不了你。

⑶ 怎么让无冲突的键盘产生冲突

按照如下步骤开发一个键盘过滤驱动程序:
1 设置分发例程
2 将过滤驱动程序attach到系统的键盘设备上;
3 创建线程,用于记录击键行为;
......
主要是要捕获,IRP_MJ_READ请求,对于其他的IRP请求,直接将其传递给下层设备对象处理;捕获后根据自己的需要进行更改;

⑷ USB过滤驱动开发

《USB Design By Example》(http://www.usb-by-example.com)的作者John Hyde实现了一个USB键盘过滤驱动程序,即给此程序增内加了一个“拦截(Intercept)”功能容来处理USB键盘的Report以实现特定的功能:当驱动程序在IRP_MJ_INTERNAL_DEVICE_CONTROL设置的完成例程从USB设备拦截到一个Get_Report_Descriptor时,拦截程序将此Descriptor中的USAGE值从“Keyboard”改为“UserDefined”,再返回给系统。

⑸ 求 键盘过滤驱动程序 的讲解

好...好大条

⑹ 如何构造一个简单的USB过滤驱动程序

一、基本原理抄 我们知道,WDM(和KDM)是分层的,在构造设备栈时,IO管理器可以使一个设备对象附加到另外一个初始驱动程序创建的设备对象上。与初始设备对象相关的驱动程序决定的IRP,也将被发送到附加的设备对象相关的驱动程序上。

⑺ 如何把ndis filter框架利用到日膚indows驱动开发工作中

NDIS Filter NET_BUFFER_LIST NET_BUFFER MDL

1

网络数据结构如下图:

5

第二种方法:

/*******************************************************************GetNetBufferData函数的功能:从1个NET_BUFFER里面获取数据。1个NET_BUFFER里面含有1个或者多个的MDL*******************************************************************/VOIDGetNetBufferData(PNET_BUFFERNetBuffer,PUCHAROutputBuffer,ULONGOutputBufferSize,PULONGOutputBytesCopied){PMDLMdl=NetBuffer->CurrentMdl;*OutputBytesCopied=0;if(NetBuffer->DataLength>OutputBufferSize){#ifDBGDbgPrint("Notenoughoutputbufferspace,in:%d,out:%d ",NetBuffer->DataLength,OutputBufferSize);#endifreturn;}NdisMoveMemory(OutputBuffer,(PUCHAR)MmGetSystemAddressForMdlSafe(Mdl,LowPagePriority)+NetBuffer->CurrentMdlOffset,Mdl->ByteCount-NetBuffer->CurrentMdlOffset);OutputBuffer+=Mdl->ByteCount-NetBuffer->CurrentMdlOffset;*OutputBytesCopied+=Mdl->ByteCount-NetBuffer->CurrentMdlOffset;////循环MDL链表,获取每一个结点的数据,数据被保存到OutputBuffer里面//OutputBuffer的空间不断地扩大。//当链表不为空,并且OutputBuffer的长度<1个NET_BUFFER的总长度while(((Mdl=Mdl->Next)!=NULL)&&(*OutputBytesCopied<NetBuffer->DataLength)){NdisMoveMemory(OutputBuffer,MmGetSystemAddressForMdlSafe(Mdl,LowPagePriority),Mdl->ByteCount);OutputBuffer+=Mdl->ByteCount;//数据被保存到OutputBuffer里面*OutputBytesCopied+=Mdl->ByteCount;//OutputBuffer的空间不断地扩大}if(Mdl!=NULL){NdisMoveMemory(OutputBuffer,MmGetSystemAddressForMdlSafe(Mdl,LowPagePriority),NetBuffer->DataLength);OutputBuffer+=Mdl->ByteCount;*OutputBytesCopied+=Mdl->ByteCount;}#ifDBGDbgPrint("buffercopied:%dbytes ",*OutputBytesCopied);#endif}

6

上面的2种方法,只是获取数据。而原本NDISFilter框架提供的这4个函数默认的代码,都没有做任何操作,没有实质性质的功能,这4个函数原本默认的代码,我们都不需要,因为我们的驱动程序需要处理网络数据包。这4个函数分别是:

7

在我们的NDISFilter工程里面,我们需要修改掉这4个函数的功能,把它们替换成我们所想要的功能。比如,你在发送数据包或者接收数据包的时候,需要实现自己的一些业务逻辑,而不是去使用MicrosoftNDISFilter提供的原始代码的功能。

8

函数的功能:NDIS调用把发送的结构和数据返还给FilterDriver。NDIS可以收集多次NdisFSendNetBufferLists发送的结构和数据形成一个单链表传递给。除非到NDIS调用,否则一个发送请求的当前状态总是未知的。一个过滤驱动是不能在NDIS调用返回结构之前对NET_BUFFER_LIST和其关联的数据做检查的。要完成一个发送请求完成后的任何必要的后继处理。当NDIS调用时,FilterDriver就重新获地对结构及结构相关资源的所有权。可以在中释放相关的资源和准备下一个NdisFSendNetBufferLists调用。NDIS总是按照过滤驱动调用NdisFSendNetBufferLists提交的顺序传递给下层驱动,但是回返的顺序则是任意的。FilterDriver可以请求一个回环发送请求,只要把NdisFSendNetBufferLists的SendFlags设置成NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK就行了。NDIS会引发一个包含发送数据的接收包指示。

9

一个FilterDriver应该对自己引发的发送请求保持跟踪并确保在完成时不调用NdisFSendNetBufferComplete例程。

步骤阅读

10

FilterSendNetBufferLists函数的功能:NDIS调用一个FilterDriver的FilterSendNetBufferLists例程来过滤上层驱动的发送请求。FilterDriver不能改变其它驱动传来的NET_BUFFER_LIST结构中的SourceHandle成员的值。它可以过滤数据并发送过滤的数据到下层驱动。

11

对每一个提交到FilterSendNetBufferLists的NDIS_BUFFER_LIST,我们可做下面的操作:

1)可以把缓冲区通过NdisFSendBufferLists传递给下层驱动,NDIS保证上下文空间对FilterDriver的有效性。过滤驱动可以在发送前修改缓冲区的内容。可以像处理自己引发的发送请求的缓冲区一样处理这个缓冲区。2)可以调用拒绝传递这个包3)排队缓冲区内容到本地的供以后处理。例如要在一定超时后处理或要接收到特定包后才处理等。如果支持这种处理方式就要支持取消请求的操作。4)可以拷贝缓冲区并引发一个发送请求。它类似自己引发一个发送请求,但必须先调用NdisFSendNetBufferComplete返回上层驱动的缓冲区。

12

发送请求在驱动栈继续完成,当一个微端口驱动调用完成一个发送请求时,NDIS会调用微端口

13

在一个发送操作完成后,FilterDriver可以做在FilterSendNetBufferLists中所有修改的相反操作。返回一个NET_BUFFER_LIST结构的单链表和发送请求的最终状态给上层的驱动。当最顶层的FilterMole的被调用完成后NDIS会调用引发发送请求的协议驱动的。如果FilterDriver不提供FilterSendNetBufferLists它还是可以引发一个发送操作的,但它必须提供一个并且不能在这个例程里把这个事件传递给上层驱动。

14

一个FilterDriver可以传递或过滤一个上层驱动的回环请求,要传递一个回环请求,NDIS会设置FilterSendNetBufferLists的SendFlags参数为NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK,FilterDriver在调用NdisFSendNetBufferLists时把这个标记传给它即可。在回环请求的情况下NDIS会指示一个包含发送数据的接收包。

15

如果一个FilterDriver修改的任何行为不是NDIS提供的标准服务,那么它应该当自己为NDIS提供相应的服务。例如,如果一个FilterDriver修改了一个硬件地址请求,就必须处理直接到这个新地址回环包。在这种情况下,因为FilterDriver已经更改了地址NDIS是不能提供一个回环服务的。

16

_Use_decl_annotations_VOIDFilterSendNetBufferLists(NDIS_HANDLEFilterMoleContext,PNET_BUFFER_LISTNetBufferLists,NDIS_PORT_NUMBERPortNumber,ULONGSendFlags){PMS_FILTERpFilter=(PMS_FILTER)FilterMoleContext;PNET_BUFFERNetBuffer;UCHARTempBuffer[MAX_BUFFER_SIZE];ULONGBytesCopied;pEthHdrEthernetHeader;pIPHdrIpHeader;#ifDBGDbgPrint(">>>FilterSendNetBufferLists:%p ",NetBufferLists);#endiffor(NetBuffer=NetBufferLists->FirstNetBuffer;NetBuffer!=NULL;NetBuffer=NetBuffer->Next){GetNetBufferData(NetBuffer,TempBuffer,MAX_BUFFER_SIZE,&BytesCopied);if(BytesCopied==0){#ifDBGDbgPrint("Netbuffercatcherror ");#endif}else{EthernetHeader=TempBuffer;if(EthernetHeader->Type==0x0800)//以太网类型{IpHeader=EthernetHeader+sizeof(EthHdr);//去掉以太网头,抓出IP头#ifDBGDbgPrint("Getippacket ");#endif}}}NdisFSendNetBufferLists(pFilter->FilterHandle,NetBufferLists,PortNumber,SendFlags);}

17

FilterReturnNetBufferLists函数的功能:如果FilterDriver设置了的状态为NDIS_STATUS_SUCCESS,NDIS通过驱动的FilterReturnNetBufferLists返回指示数据。在这种情况下FilterDriver失去了对NET_BUFFER_LIST的所有权,直到FilterReturnNetBufferLists被调用。FilterDriver调用NdisFIndicateNetBufferLists传递接收指示给驱动栈上的上层驱动,如果上层驱动保留了对缓冲区(NET_BUFFER_LIST)的所有权,NDIS会调用FilterDriver的FilterReturnNetBufferLists例程。在FilterReturnNetBufferLists中应该撤消在接收路径上(如在FilterReciveNetBufferLists中做的一些处理)的操作。当最底层的FilterMole完成对缓冲区(NET_BUFFER_LIST)的处理后,NDIS把缓冲区返回给微端口驱动。如果FilterReceiveNetBufferLists的ReceiveFlags没有设置NDIS_RECEIVE_FLAGS_RESOURCES标记,FilterDriver调用NdisFReturnNetBufferList返回这个缓冲区数据,如果设置了FilterReceiveNetBufferLists直接返回时就把缓冲区返还给了下层微端口驱动。

步骤阅读

18

FilterReceiveNetBufferLists函数的功能:FilterDriver调用来指示发送数据。这个函数通过NET_BUFFER_LIST结构给上层驱动指示数据。FilterDriver可以从池中分配这个结构。如果FilterDriver设置了的状态为NDIS_STATUS_SUCCESS,NDIS通过驱动的FilterReturnNetBufferLists返回指示数据。在这种情况下FilterDriver失去了对NET_BUFFER_LIST的所有权直到FilterReturnNetBufferLists被调用。如果FilterDriver在调用时设置ReceiveFlags为NDIS_RECEIVE_FLAGS_RESOURCES,在函数返回后FilterDriver会立即恢复对NET_BUFFER_LIST的所有权,这时FilterDriver必须立即处理这个NET_BUFFER_LIST的返回,因为NDIS在这种情况下是不会调用FilterReturnNetBufferLists返回NET_BUFFER_LIST结构的。注意:一个FilterDriver应该跟踪自己引发的接收指示确保它在FilterReturnNetBufferLists中不调用NdisFReturnNetBufferLists。

19

_Use_decl_annotations_(NDIS_HANDLEFilterMoleContext,PNET_BUFFER_LISTNetBufferLists,NDIS_PORT_NUMBERPortNumber,ULONGNumberOfNetBufferLists,ULONGReceiveFlags){PMS_FILTERpFilter=(PMS_FILTER)FilterMoleContext;PNET_BUFFERNetBuffer;UCHARTempBuffer[MAX_BUFFER_SIZE];ULONGBytesCopied;pEthHdrEthernetHeader;pIPHdrIpHeader;#ifDBGDbgPrint(">>>FilterReceiveNetBufferLists:%p ",NetBufferLists,ReceiveFlags,NumberOfNetBufferLists);#endifdo{for(NetBuffer=NetBufferLists->FirstNetBuffer;NetBuffer!=NULL;NetBuffer=NetBuffer->Next){GetNetBufferData(NetBuffer,TempBuffer,MAX_BUFFER_SIZE,&BytesCopied);if(BytesCopied==0){#ifDBGDbgPrint("Netbuffercatcherror ");#endif}else{EthernetHeader=TempBuffer;if(EthernetHeader->Type==0x0800){IpHeader=EthernetHeader+sizeof(EthHdr);#ifDBGDbgPrint("IPpacketexist ");#endif}}}}while(FALSE);

20

调用来指示发送数据。如果FilterDriver设置了的状态为NDIS_STATUS_SUCCESS,NDIS通过驱动的FilterReturnNetBufferLists返回指示数据。如果FilterDriver设置了的ReceiveFlags值为NDIS_RECEIVE_FLAGS_RESOURCES,那么在函数返回后FilterDriver会立即恢复对NET_BUFFER_LIST的所有权,这时FilterDriver必须立即处理这个NET_BUFFER_LIST的返回。在这种情况下是不会调用FilterReturnNetBufferLists返回NET_BUFFER_LIST结构的。

阅读全文

与键盘过滤驱动开发教程相关的资料

热点内容
净化器水质弱碱性怎么调 浏览:590
小饭店用的油烟净化器怎么安装 浏览:937
厨房污水泵怎么选型 浏览:37
智能超纯水机多少钱 浏览:985
饮水机的水用什么排放 浏览:995
用很小的小三角形屏怎么做饮水机 浏览:654
光固化符合树脂 浏览:941
滚筒洗衣机废水还是老式废水 浏览:192
小车有汽油滤芯多少钱 浏览:479
凉水除垢剂是哪一种化学剂 浏览:750
污水终端湿地报修怎么写 浏览:865
环保滤网过滤器 浏览:134
纯水最高理论电阻值是多少 浏览:272
优玥纯水净水机多少钱一台 浏览:859
医疗污水工程施工资质 浏览:170
创星cf600过滤效果 浏览:275
养蜂不锈钢过滤网 浏览:677
无废水反渗透净水器 浏览:343
实验超纯水设备怎么翻译 浏览:227
化工edi 浏览:634