电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

键盘过滤驱动学习VIP免费

键盘过滤驱动学习_第1页
1/4
键盘过滤驱动学习_第2页
2/4
键盘过滤驱动学习_第3页
3/4
http://hi.baidu.com/pushad/item/0a78c3ba0812e6afeaba9399[寒江独钓]IRPHOOK键盘过滤之替换原键盘分发函数MajorFunction.h#ifndef_MAJORFUNCTION_HEADERS_#define_MAJORFUNCTION_HEADERS_#include#defineDELAY_ONE_MILLISECOND1000000externPOBJECT_TYPE*IoDriverObjectType;externNTSTATUSObReferenceObjectByName(INPUNICODE_STRINGObjectPath,INULONGAttributes,INPACCESS_STATEPassedAccessStateOPTIONAL,INACCESS_MASKDesiredAccessOPTIONAL,INPOBJECT_TYPEObjectType,INKPROCESSOR_MODEAccessMode,INOUTPVOIDParseContextOPTIONAL,OUTPVOID*ObjectPtr);PDRIVER_DISPATCHOldMajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1];#endif#include"MajorFunction.h"//原键盘驱动分发统一处理NTSTATUSOldKeyBoardDispath(PDEVICE_OBJECTDeviceObject,PIRPpIrp){NTSTATUSStatus=STATUS_UNSUCCESSFUL;PIO_STACK_LOCATIONirpStack=NULL;irpStack=IoGetCurrentIrpStackLocation(pIrp);Status=OldMajorFunction[irpStack->MajorFunction](DeviceObject,pIrp);DbgPrint("IRP_MJ_FUNCTIOINcompletesuccessful!\n");returnStatus;}//HOOK函数,替换键盘原来的MajorFunctionNTSTATUSMajorFunctionHook(PDRIVER_OBJECTDriverObject){NTSTATUSStatus=STATUS_UNSUCCESSFUL;PDRIVER_OBJECTKeyBoardDriverObject=NULL;UNICODE_STRINGKeyBoardDriverName;PFILE_OBJECTpFileObject=NULL;intnIndex=0;RtlInitUnicodeString(&KeyBoardDriverName,L"\\Driver\\Kbdclass");Status=ObReferenceObjectByName(&KeyBoardDriverName,OBJ_CASE_INSENSITIVE,\NULL,0,IoDriverObjectType,KernelMode,NULL,&KeyBoardDriverObject);if(!NT_SUCCESS(Status)){DbgPrint("inMajorFunctionHookGetObReferenceObjectByNamebyKeyBoardDriverObjectError\n");gotoExit0;}//保存及设置新键盘的MajorFunctionfor(nIndex=0;nIndexMajorFunction[nIndex];InterlockedExchangePointer(&KeyBoardDriverObject->MajorFunction[nIndex],DriverObject->MajorFunction[nIndex]);}DbgPrint("IRP_MJ_FUNCTIONHookSuccessful!\n");//解除引用ObDereferenceObject(KeyBoardDriverObject);Exit0:returnStatus;}//卸载函数NTSTATUSUnLoadDriver(PDRIVER_OBJECTDriverObject){NTSTATUSStatus=STATUS_UNSUCCESSFUL;intnIndex=0;PDRIVER_OBJECTKeyBoardDriverObject=NULL;UNICODE_STRINGKeyBoardName;LARGE_INTEGERDelay;RtlInitUnicodeString(&KeyBoardName,L"\\Driver\\Kbdclass");Status=ObReferenceObjectByName(&KeyBoardName,OBJ_CASE_INSENSITIVE,NULL,0,*IoDriverObjectType,\KernelMode,NULL,&KeyBoardDriverObject);if(!NT_SUCCESS(Status)){DbgPrint("UnloadDriverGetKeyboardDriverObjectError\n");gotoExit0;}//交换原来的分发函数for(nIndex;nIndexMajorFunction[nIndex],OldMajorFunction[nIndex]);}DbgPrint("ChangeMajorFunctionSuccessful!\n");Delay=RtlConvertLongToLargeInteger(5*DELAY_ONE_MILLISECOND);//延时等待完成KeDelayExecutionThread(KernelMode,FALSE,&Delay);ObReferenceObject(KeyBoardDriverObject);Exit0:returnStatus;}NTSTATUSDriverEntry(PDRIVER_OBJECTDriverObject,PUNICODE_STRINGRegisterPath){NTSTATUSStatus=STATUS_UNSUCCESSFUL;intnIndex=0;//设置新的键盘分发函数for(nIndex;nIndexMajorFunction[nIndex]=OldKeyBoardDispath;}DriverObject->DriverUnload=UnLoadDriver;Status=MajorFunctionHook(DriverObject);returnStatus;}

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

键盘过滤驱动学习

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部