[寒江独钓]#ifndef_MAJORFUNCTION_HEADERS_#define_MAJORFUNCTION_HEADERS_#include<>#defineDELAY_ONE_MILLISECOND1000000externPOBJECT_TYPE*IoDriverObjectType;externNTSTATUSObReferenceObjectByName(INPUNICODE_STRINGObjectPath,INULONGAttributes,essStateOPTIONAL,essOPTIONAL,INPOBJECT_TYPEObjectType,essMode,INOUTPVOIDParseContextOPTIONAL,OUTPVOID*ObjectPtr);PDRIVER_DISPATCHOldMajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1];#endif#include""//原键盘驱动分发统一处理NTSTATUSOldKeyBoardDispath(PDEVICE_OBJECTDeviceObject,PIRPpIrp){NTSTATUSStatus=ESSFUL;PIO_STACK_LOCATIONirpStack=NULL;irpStack=IoGetCurrentIrpStackLocation(pIrp);Status=OldMajorFunction[irpStack->MajorFunction](DeviceObject,pIrp);DbgPrint("essful!\n");returnStatus;}//HOOK函数,替换键盘原来的MajorFunctionNTSTATUSMajorFunctionHook(PDRIVER_OBJECTDriverObject){NTSTATUSStatus=ESSFUL;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(!ESS(Status)){DbgPrint("inMajorFunctionHookGetObReferenceObjectByNamebyKeyBoardDriverObjectError\n");gotoExit0;}//保存及设置新键盘的MajorFunctionfor(nIndex=0;nIndex<IRP_MJ_MAXIMUM_FUNCTION;nIndex++){OldMajorFunction[nIndex]=Ke
键盘过滤驱动学习 来自淘豆网www.taodocs.com转载请标明出处.