hxm2引擎的假人脚本按键精灵怎么写脚本呀?

仿按键通用脚本引擎,程序放出,中文脚本,支持模糊找图找色,驱动开发,过H...
仿按键通用脚本引擎,程序放出,中文脚本,支持模糊找图找色,驱动开发,过H...
控制鼠标和键盘的底层驱动VC6.0源码无私,能过HP、NP及盛大保护等,各位可以参考:VMouse32.cpp#include "stdafx.h"//作者:hqin211//QQ://定义分页内存、非分页内存和INIT段内存的标志#define PAGEDCODE code_seg("PAGE")#define LOCKEDCODE code_seg()#define INITCODE code_seg("INIT")#define PAGEDDATA data_seg("PAGE")#define LOCKEDDATA data_seg()#define INITDATA data_seg("INIT")#define arraysize(p) (sizeof(p)/sizeof((p)[0]))#define SIOCTL_TYPE 40000#define DEVICE_NAME L"\\Device\\VMouse320"#define WIN32_DEVICE L"\\DosDevices\\VMouse320"#define PS2KBD_DRIVER_NAME L"\\Driver\\i8042prt"#define USBKBD_DRIVER_NAME L"\\Driver\\Kbdhid"#define KBD_DRIVER_NAME L"\\Driver\\kbdclass"#define USBMOUSE_DRIVER_NAME L"\\Driver\\mouhid"#define MOUSE_DRIVER_NAME L"\\Driver\\mouclass"#define DESTFILE L"\\??\\D:\\mousekey.txt"#define KEYBOARD_DEVICE 1#define MOUSE_DEVICE 2#define POOL_TAG 'tsiL'#define CREATE_MOUSE_REC 1#define WRITE_MOUSE_REC 2#define CLOSE_MOUSE_REC 3#define IOCTL_MOUSE CTL_CODE( SIOCTL_TYPE, 0x01, METHOD_BUFFERED , FILE_ANY_ACCESS&&)&&&&//使用缓冲区方式操作#define IOCTL_KEY CTL_CODE( SIOCTL_TYPE, 0x02, METHOD_BUFFERED , FILE_ANY_ACCESS&&)#define IOCTL_MOUSEDISABLED CTL_CODE( SIOCTL_TYPE, 0x03, METHOD_BUFFERED , FILE_ANY_ACCESS&&)#define IOCTL_MOUSEENABLED CTL_CODE( SIOCTL_TYPE, 0x04, METHOD_BUFFERED , FILE_ANY_ACCESS&&)#define IOCTL_INIT CTL_CODE( SIOCTL_TYPE, 0x05, METHOD_BUFFERED , FILE_ANY_ACCESS&&)#define IOCTL_REG CTL_CODE( SIOCTL_TYPE, 0x06, METHOD_BUFFERED , FILE_ANY_ACCESS&&)typedef NTSTATUS (*READ_DISPATCH)(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp);typedef struct _NEW_MOUSE_DATA_{&&&&int beforD&&&&MOUSE_INPUT_DATA mouseD&&&&int endD} NEW_MOUSE_DATA,*PNEW_MOUSE_DATA;typedef struct _NEW_KEY_DATA_{&&&&int beforD&&&&KEYBOARD_INPUT_DATA keyD&&&&int endD} NEW_KEY_DATA,*PNEW_KEY_DATA;typedef struct _MOUSE_FILTER_DATA{&&&&PDRIVER_OBJECT&&pMouseDriverO // "\\Driver\\Mouclass" 的指针&&&&READ_DISPATCH OldR // 原来的IRP_MJ_READ 派遣例程&&&&ULONG LeftDownT // 上次鼠标左键按下的时刻 &&&&KMUTEX ReadM // Read互斥体&&&&SINGLE_LIST_ENTRY ListH// 保存Pending IRP的链表&&&&SINGLE_LIST_ENTRY CancelH// 用来对上面链表的进行复制&&&&}MOUSE_FILTER_DATA, *PMOUSE_FILTER_DATA;typedef struct _MOUSE_POINT {&&&&LONG LastX;&&&&LONG LastY;&&&&LONG stepX;&&&&LONG stepY;} MOUSE_POINT, *PMOUSE_POINT;typedef struct _PENDING_IRP_LIST{&&&&SINGLE_LIST_ENTRY SingleListE&&&&&&&&PIRP PendingI&&&&}PENDING_IRP_LIST, *PPENDING_IRP_LIST;typedef struct _MOUSE_INIT{&&&&LONG srcMouseI&&&&&&&&LONG desMouseI&&&&int initS}MOUSE_INIT,*PMOUSE_INIT;typedef enum _SYSTEM_INFORMATION_CLASS {&&SystemBasicInformation = 0,&&SystemCpuInformation = 1,&&SystemPerformanceInformation = 2,&&SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */&&Unknown4,&&SystemProcessInformation = 5,&&Unknown6,&&Unknown7,&&SystemProcessorPerformanceInformation = 8,&&Unknown9,&&Unknown10,&&SystemModuleInformation = 11,&&Unknown12,&&Unknown13,&&Unknown14,&&Unknown15,&&SystemHandleInformation = 16,&&Unknown17,&&SystemPageFileInformation = 18,&&Unknown19,&&Unknown20,&&SystemCacheInformation = 21,&&Unknown22,&&SystemInterruptInformation = 23,&&SystemDpcBehaviourInformation = 24,&&SystemFullMemoryInformation = 25,&&SystemNotImplemented6 = 25,&&SystemLoadImage = 26,&&SystemUnloadImage = 27,&&SystemTimeAdjustmentInformation = 28,&&SystemTimeAdjustment = 28,&&SystemSummaryMemoryInformation = 29,&&SystemNotImplemented7 = 29,&&SystemNextEventIdInformation = 30,&&SystemNotImplemented8 = 30,&&SystemEventIdsInformation = 31,&&SystemCrashDumpInformation = 32,&&SystemExceptionInformation = 33,&&SystemCrashDumpStateInformation = 34,&&SystemKernelDebuggerInformation = 35,&&SystemContextSwitchInformation = 36,&&SystemRegistryQuotaInformation = 37,&&SystemCurrentTimeZoneInformation = 44,&&SystemTimeZoneInformation = 44,&&SystemLookasideInformation = 45,&&SystemSetTimeSlipEvent = 46,&&SystemCreateSession = 47,&&SystemDeleteSession = 48,&&SystemInvalidInfoClass4 = 49,&&SystemRangeStartInformation = 50,&&SystemVerifierInformation = 51,&&SystemAddVerifier = 52,&&SystemSessionProcessesInformation = 53,&&SystemInformationClassMax} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;typedef VOID(*KeyServiceCallback) (&&&&&&&&&&PDEVICE_OBJECT&&DeviceObject,&&&&&&&&&&PKEYBOARD_INPUT_DATA&&InputDataStart,&&&&&&&&&&PKEYBOARD_INPUT_DATA&&InputDataEnd,&&&&&&&&&&PULONG&&InputDataConsumed&&&&&&&&&&);typedef VOID(*MouseServiceCallback) (&&&&&&&&&&PDEVICE_OBJECT&&DeviceObject,&&&&&&&&&&PMOUSE_INPUT_DATA&&InputDataStart,&&&&&&&&&&PMOUSE_INPUT_DATA&&InputDataEnd,&&&&&&&&&&PULONG&&InputDataConsumed&&&&&&&&&&);typedef struct _SYSTEM_MODULE_INFORMATION {//Information Class 11&&ULONG&&&&Reserved[2];&&PVOID&&&&B&&ULONG&&&&S&&ULONG&&&&F&&USHORT&&&&I&&USHORT&&&&U&&USHORT&&&&LoadC&&USHORT&&&&ModuleNameO&&CHAR&&&&ImageName[256];}SYSTEM_MODULE_INFORMATION,*PSYSTEM_MODULE_INFORMATION;//设备扩展结构typedef struct _deviceExtension{&&&&PDEVICE_OBJECT DeviceO&&&&UNICODE_STRING devN&&&&PDEVICE_OBJECT TargetDeviceO&&&&PDEVICE_OBJECT PhysicalDeviceO&&&&UNICODE_STRING DeviceI&&&&UNICODE_STRING symLinkN&&&&USHORT isSymL&&&&USHORT IsControlD&&&&USHORT IsMouseE&&&&USHORT IsMouseR&&&&LARGE_INTEGER beforT&&&&LONG&&&&LONG&&&&LONG stepX;&&&&LONG stepY;&&&&LONG curX;&&&&LONG curY;&&&&//PVOID arrI&&&&//ULONG arrIrpS&&&&PDEVICE_OBJECT mouseDeviceObjects[2];&&&&//PIRP proxyI&&&&KeyServiceCallback KeyServiceC&&&&MouseServiceCallback MouseServiceC&&&&PDEVICE_OBJECT kbdDeviceO&&&&PDEVICE_OBJECT mouDeviceO&&&&MOUSE_INIT mouseI} VMouse32_DEVICE_EXTENSION, *PVMouse32_DEVICE_EXTENSION;//定义全局变量MOUSE_FILTER_DATA gFilterData = {0};PDRIVER_OBJECT gDriverObject = NULL;static KEVENTint fileOperType = 0;MOUSE_INPUT_DATA curMint isRun = 1;#ifdef __cplusplusextern "C"{extern POBJECT_TYPE *IoDriverObjectT// 通过驱动对象名称取得驱动对象的引用(未文档化)&&NTSTATUS ObReferenceObjectByName(&&&&&&&&&&IN PUNICODE_STRING ObjectName,&&&&&&&&&&IN ULONG Attributes,&&&&&&&&&&IN PACCESS_STATE AccessState,&&&&&&&&&&IN ACCESS_MASK DesiredAccess,&&&&&&&&&&IN POBJECT_TYPE ObjectType,&&&&&&&&&&IN KPROCESSOR_MODE AccessMode,&&&&&&&&&&IN PVOID ParseContext,&&&&&&&&&&OUT PVOID *Object&&&&&&&&&&);NTSYSAPINTSTATUSNTAPI ZwQuerySystemInformation(&&&&&&&&&&&& IN ULONG SystemInformationClass,&&&&&&&&&&&& IN OUT PVOID SystemInformation,&&&&&&&&&&&& IN ULONG SystemInformationLength,&&&&&&&&&&&& OUT PULONG ReturnLength);}#endifvoid MyCurTimeStr(WCHAR * time_str);void VMouse32Unload(IN PDRIVER_OBJECT DriverObject);NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject);NTSTATUS GetKmclassInfo(PDEVICE_OBJECT DeviceObject, USHORT Index);//分发例程NTSTATUS Dispatch(&&&&&&&&&&IN PDEVICE_OBJECT DeviceObject,&&&&&&&&&&IN PIRP Irp&&&&&&&&&&);//控制分发例程NTSTATUS DispatchControlDevice(&&&&&&&&&&IN PDEVICE_OBJECT DeviceObject,&&&&&&&&&&IN PIRP Irp&&&&&&&&&&);NTSTATUS DispatchIrpDeviceControl(&&&&&&&&&&IN PDEVICE_OBJECT DeviceObject,&&&&&&&&&&IN PIRP Irp&&&&&&&&&&);VOID CancelReadIRP(IN PDEVICE_OBJECT DeviceObject,IN PIRP pIrp);BOOLEAN CancelIrp(PIRP pIrp);NTSTATUS VMouse32CreateClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);NTSTATUS VMouse32DefaultHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);NTSTATUSCreateClose(&&&&__in PDEVICE_OBJECT DeviceObject,&&&&__in PIRP Irp&&&&);BOOLEAN MyCopyFile(IN PUNICODE_STRINGustrDestFile,IN PUNICODE_STRINGustrSrcFile);BOOLEAN RunCheck();LONGLONG MakeMilSec();VOID FileDiskThread(IN PVOID Context);#ifdef __cplusplusextern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING&&RegistryPath);#endifNTSTATUSCreateClose(&&&&__in PDEVICE_OBJECT DeviceObject,&&&&__in PIRP Irp&&&&){&&&&PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation(Irp);&&&&&&&&UNREFERENCED_PARAMETER(DeviceObject);&&&&PAGED_CODE();&&&&////KdPrint(("Entered IRP_MJ_%s\n", (irpStack-&MajorFunction == IRP_MJ_CREATE) ? "CREATE" : "CLOSE" ));&&&&Irp-&IoStatus.Status = STATUS_SUCCESS;&&&&Irp-&rmation = 0;&&&&IoCompleteRequest(Irp, IO_NO_INCREMENT);&&&&return Irp-&IoStatus.S}VOID CleanUP(__in PDEVICE_OBJECT DeviceObject){&&&&UNICODE_STRING&&SymbolicLinkN&&&&if(!DeviceObject)&&&&&&&&&&&&// 删除符号链接和设备对象&&&&RtlInitUnicodeString(&SymbolicLinkName, WIN32_DEVICE);&&&&IoDeleteSymbolicLink(&SymbolicLinkName);&&&&&& &&&&IoDeleteDevice(DeviceObject);}// 取消等待的IRPVOID CancelPendingIrp(){&&&&PPENDING_IRP_LIST PendingList = NULL, CancelList = NULL;&&&&PSINGLE_LIST_ENTRY pSingleListEntry = NULL;&&&&// 获取互斥体,保护链表gFilterData.ListHead&&&&KeWaitForMutexObject(&gFilterData.ReadMutex, Executive, KernelMode, FALSE, NULL);&&&&&&&&pSingleListEntry = gFilterData.ListHead.N&&&&while(pSingleListEntry)&&&&{&&&&&& &&&&&&&&PendingList = CONTAINING_RECORD(pSingleListEntry, PENDING_IRP_LIST, SingleListEntry);&&&&&&&&////KdPrint(("Copy Single List = 0x%x", PendingList));&&&&&&&&// 复制链表,然后将取消IRP的操作放到新的链表中处理&&&&&&&&CancelList = (PPENDING_IRP_LIST)ExAllocatePoolWithTag(NonPagedPool, sizeof(PENDING_IRP_LIST), POOL_TAG);&&&&&&&&if(CancelList)&&&&&&&&{&&&&&&&&&&&&RtlCopyMemory(CancelList, PendingList, sizeof(PENDING_IRP_LIST));&&&&&&&&&&&&PushEntryList(&gFilterData.CancelHead, &CancelList-&SingleListEntry);&&&&&&&&}&&&&&&&&&& &&&&&&&&&&&&&&&&pSingleListEntry = pSingleListEntry-&N&&&&}&& &&&&// 释放互斥体&&&&KeReleaseMutex(&gFilterData.ReadMutex, FALSE);&&&&&&&&// 之所以要复制一个新的链表来取消IRP (通过调用IoCancelIrp),&&&&// 是因为IoCancelIrp 会调用MyReadComplete 这个完成例程回调,&&&&// 而MyReadComplete里面又对链表进行操作,这样会破坏链表的结构&&&&pSingleListEntry = PopEntryList(&gFilterData.CancelHead);&&&&while(pSingleListEntry)&&&&{&&&&&&&&CancelList = CONTAINING_RECORD(pSingleListEntry, PENDING_IRP_LIST, SingleListEntry);&&&&&&&&if(CancelList)&&&&&&&&{&&&&&&&&&&&&////KdPrint(("CancelPendingIrp = 0x%x", CancelList-&PendingIrp));&&&&&&&&&&&&if(!CancelList-&PendingIrp-&Cancel)&&&&&&&&&&&&{// 在这里,取出复制链表中的IRP,然后进行取消&&&&&&&&&&&&&&&&IoCancelIrp(CancelList-&PendingIrp);&&&&&&&&&&&&}&&&&&&&&&&&&ExFreePoolWithTag(CancelList, POOL_TAG);&&&&&&&&&&&&&&&&&&&&pSingleListEntry = PopEntryList(&gFilterData.CancelHead);&&&&&&&&}&&&&}}/* && 描述:Read完成例程 */NTSTATUS MyReadComplete(&&&&IN PDEVICE_OBJECT DeviceObject,&&&&IN PIRP Irp, &&&&IN PVOID Context ) {&&&&ULONG i,&&&&PMOUSE_INPUT_DATA inputD&&&&PSINGLE_LIST_ENTRY pSingleListEntry = &gFilterData.ListH&&&&PPENDING_IRP_LIST PendingList = NULL;&&&&PVMouse32_DEVICE_EXTENSION pdex = NULL;&&&&if (gDriverObject){&&&&&&&&pdex = (PVMouse32_DEVICE_EXTENSION)gDriverObject-&DeviceObject-&DeviceE&&&&}&&&&/*&&&&if (pdex){&&&&&&&&if( NT_SUCCESS( Irp-&IoStatus.Status) &&&&&&&&&&&&&&pdex-&IsMouseRec == TRUE && pdex-&beforTime.QuadPart & -1) &&&&&&&&{&&&&&&&&&&&&inputData = (PMOUSE_INPUT_DATA)Irp-&AssociatedIrp.SystemB&&&&&&&&&&&&num = Irp-&rmation / sizeof(MOUSE_INPUT_DATA);&&&&&&&&&&&&for( i = 0; i & i++ ) &&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&WCHAR dbgTime[32] = {0};&&&&&&&&&&&&&&&&MyCurTimeStr(dbgTime);&&&&&&&&&&&&&&&&//KdPrint(("%S num=%d,ExtraInformation=%d,UnitId=%d,Flags=%d,LastX=%d,LastY=%d,ButtonFlags=%d,ButtonData=%d,RawButtons=%d\n",&&&&&&&&&&&&&&&&&&&&&&&&&&&&dbgTime,num,inputData[i].ExtraInformation,inputData[i].UnitId,inputData[i].Flags,inputData[i].LastX,inputData[i].LastY,&&&&&&&&&&&&&&&&&&&&&&&&&&&&inputData[i].ButtonFlags,inputData[i].ButtonData,&&&&&&&&&&&&&&&&&&&&&&&&&&&&inputData[i].RawButtons));&&&&&&&&&&&&&&&&if (inputData[i].ButtonFlags == 0){&&&&&&&&&&&&&&&&&&&&if (inputData[i].Flags == 1){&&&&//绝对坐标&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curX = inputData[i].LastX - pdex-&&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curY = inputData[i].LastY - pdex-&;&&&&&&&&&&&&&&&&&&&&&&&&if (pdex-&curX &=&&0 - pdex-&stepX ||&&&&&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curX &=&&pdex-&stepX ||&&&&&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curY &=&&0 - pdex-&stepY ||&&&&&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curY &=&&pdex-&stepY){&&&&&&&&&&&&&&&&&&&&&&&&&&&&memcpy(&curMouse, &inputData[i],sizeof(MOUSE_INPUT_DATA));&&&&&&&&&&&&&&&&&&&&&&&&&&&&fileOperType = WRITE_MOUSE_REC;&&&&&&&&&&&&&&&&&&&&&&&&&&&&KeSetEvent(&event, (KPRIORITY)0, FALSE);&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&}else if (inputData[i].Flags == 0){&&&&//相对坐标&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curX += inputData[i].LastX;&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curY += inputData[i].LastY;&&&&&&&&&&&&&&&&&&&&&&&&if (pdex-&curX &=&&0 - pdex-&stepX ||&&&&&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curX &=&&pdex-&stepX ||&&&&&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curY &=&&0 - pdex-&stepY ||&&&&&&&&&&&&&&&&&&&&&&&&&&&&pdex-&curY &=&&pdex-&stepY){&&&&&&&&&&&&&&&&&&&&&&&&&&&&memcpy(&curMouse, &inputData[i],sizeof(MOUSE_INPUT_DATA));&&&&&&&&&&&&&&&&&&&&&&&&&&&&curMouse.LastX = pdex-&dx + pdex-&curX;&&&&&&&&&&&&&&&&&&&&&&&&&&&&curMouse.LastY = pdex-&dx + pdex-&curY;&&&&&&&&&&&&&&&&&&&&&&&&&&&&fileOperType = WRITE_MOUSE_REC;&&&&&&&&&&&&&&&&&&&&&&&&&&&&KeSetEvent(&event, (KPRIORITY)0, FALSE);&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&&&memcpy(&curMouse, &inputData[i],sizeof(MOUSE_INPUT_DATA));&&&&&&&&&&&&&&&&&&&&fileOperType = WRITE_MOUSE_REC;&&&&&&&&&&&&&&&&&&&&KeSetEvent(&event, (KPRIORITY)0, FALSE);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}&&&&}&&&&*/&&&&KeWaitForMutexObject(&gFilterData.ReadMutex, Executive, KernelMode, FALSE, NULL);&&&&for(; pSingleListEntry-&N pSingleListEntry = pSingleListEntry-&Next)&&&&&&&&&&&&{&&&&&&&&PendingList = CONTAINING_RECORD(pSingleListEntry-&Next, PENDING_IRP_LIST, SingleListEntry);&&&&&&&&if(PendingList-&PendingIrp == Irp)&&&&&&&&{// 从链表中移除&&&&&&&&&&&&pSingleListEntry-&Next = pSingleListEntry-&Next-&N&&&&&&&&&&&&ExFreePoolWithTag(PendingList, POOL_TAG); &&&&&&&&&&&&&&&&&&&&}&&&&}&&&&KeReleaseMutex(&gFilterData.ReadMutex, FALSE);&&&&&& &&&&//////KdPrint(("MyReadComplete Irp= 0x%X, 0x%X", Irp,&&Irp-&IoStatus.Status));&&&&&&&&//调用原来的完成函数&&&&if ((Irp-&StackCount & 1) && (Context != NULL))&&&&{&&&&&&&&return ((PIO_COMPLETION_ROUTINE)Context)(DeviceObject, Irp, NULL);&&&&}&&&&else&&&&{&&&&&&&&return Irp-&IoStatus.S&&&&}}NTSTATUSMyRead(&&&&__in PDEVICE_OBJECT DeviceObject,&&&&__in PIRP Irp&&&&){&&&&PPENDING_IRP_LIST PendingList = NULL;&&&&PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);&&&&//////KdPrint(("MyRead Irp= 0x%p ", Irp));&&&&/*&&&&WCHAR dbgTime[32] = {0};&&&&MyCurTimeStr(dbgTime);&&&&////KdPrint(("%S Enter MyRead Irp= 0x%p ", dbgTime, Irp)); &&&&*/&&&&PendingList = (PPENDING_IRP_LIST)ExAllocatePoolWithTag(NonPagedPool, sizeof(PENDING_IRP_LIST), POOL_TAG);&&&&&&&&if(PendingList)&&&&{&&&&&&&&PendingList-&PendingIrp = I&&&&&&&&&&&&&&&&KeWaitForMutexObject( &gFilterData.ReadMutex, Executive, KernelMode, FALSE, NULL);&&&&&&&&&&&&&&&&&&&&&&&&PushEntryList(&gFilterData.ListHead, &PendingList-&SingleListEntry);&&&&&&&&KeReleaseMutex(&gFilterData.ReadMutex, FALSE); &&&&&&&&// 按理说,应该调用IoSetCompletionRoutine来设置完成例程的&&&&&&&&// 但是,那样会导致完成例程根本不会被执行,Why?&&&&&&&&irpSp-&Control = SL_INVOKE_ON_SUCCESS|SL_INVOKE_ON_ERROR|SL_INVOKE_ON_CANCEL;&&&&&&&&//保留原来的完成函数&&&&&&&&irpSp-&Context = irpSp-&CompletionR&&&&&&&&irpSp-&CompletionRoutine = (PIO_COMPLETION_ROUTINE)MyReadC&&&&}&&&&return&&gFilterData.OldRead(DeviceObject, Irp); }NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING&&RegistryPath){&&&&WCHAR dbgTime[30];&&&&MyCurTimeStr(dbgTime);&&&&////KdPrint(("%S Enter DriverEntry\r\n",dbgTime));&&&&NTSTATUS&&&&&&&&&&&&gDriverObject = DriverO&&&&for (i = 0; i &= IRP_MJ_MAXIMUM_FUNCTION; i++)&&&&&&&&DriverObject-&MajorFunction[i] = D&&&&DriverObject-&MajorFunction[IRP_MJ_CREATE] = &&&&DriverObject-&MajorFunction[IRP_MJ_CLOSE] = CreateC&&&&//DriverObject-&MajorFunction[IRP_MJ_PNP] = VMouse32PnP;&&&&DriverObject-&DriverUnload = VMouse32U&&&&status = AddDevice(DriverObject);&&&&if(!NT_SUCCESS(status)){&&&&&&&&&&&&}&&&&KeInitializeEvent(&&&&&&&&&&&event,&&&&&&&&&&SynchronizationEvent,//SynchronizationEvent为同步事件&&&&&&&&&&FALSE//&&当是TRUE 时初始化事件是有信号状态.,当是FALSE时初始化事件是没信号状态,如果此处为TRUE,则为有信号状态,KeWaitForSingleObject会直接通过,此时需要调用KeResetEvent来设置为无信号&&&&&&); &&&&/*&&&&HANDLE hT&&&&status = PsCreateSystemThread(&hThread, (ACCESS_MASK)0L, NULL, NULL, NULL,&& FileDiskThread, NULL);&&&&if(!NT_SUCCESS(status))&& {&&&& CleanUP(DriverObject-&DeviceObject);&&&&&& }&&ZwClose(hThread);&&*/&&&&&&&&////KdPrint(("Leave DriverEntry\r\n"));&&&&//////KdPrint(("%X\r\n",IOCTL_REC));&&&&//////KdPrint(("%X\r\n",IOCTL_ENDREC));&&&&// 测试函数&&&&/*&&&&UNICODE_STRING ustrSrcF&&&&UNICODE_STRING ustrDestF&&&&RtlInitUnicodeString(&ustrSrcFile, L"\\??\\C:\\windows\\notepad.exe");&&&&RtlInitUnicodeString(&ustrDestFile, L"\\??\\C:\\notepad.exe");&&&&if(MyCopyFile(&ustrDestFile, &ustrSrcFile))&&&&{&&&&////KdPrint(("[ReadFileTest] CopyFile Success!"));&&&&}&&&&else&&&&{&&&&////KdPrint(("[ReadFileTest] CopyFile Error!"));&&&&}&&&&*/&&&&}/* && 描述:IRP处理例程 */&&NTSTATUS Dispatch(&&&&&&&&&&IN PDEVICE_OBJECT DeviceObject,&&&&&&&&&&IN PIRP Irp&&&&&&&&&&)&&{&&&&&& PVMouse32_DEVICE_EXTENSION pExt = ((PVMouse32_DEVICE_EXTENSION)DeviceObject-&DeviceExtension);&&&& PDEVICE_OBJECT lowerDeviceObject = pExt-&TargetDeviceO&&&&&&PIO_STACK_LOCATION irpsp = IoGetCurrentIrpStackLocation(Irp);&&&&&&if (pExt-&IsControlDevice)&&&&{&&&&&&&&return DispatchControlDevice(DeviceObject, Irp);&&&&}&&&&switch (irpsp-&MajorFunction) {&&&&&&&&&&case IRP_MJ_POWER:&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&////KdPrint(("IRP_MJ_POWER\n"));&&&&&&&&&&&&&&&&&&PoStartNextPowerIrp(Irp);&&&&&&&&&&&&&&&&&&IoSkipCurrentIrpStackLocation(Irp);&&&&&&&&&&&&&&&&&&return PoCallDriver(lowerDeviceObject, Irp);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&case IRP_MJ_PNP:&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&////KdPrint(("IRP_MJ_PNP\n")); &&&&&&&&&&&&&&&&ULONG fcn = irpsp-&MinorF&&&&&&&&&&&&&&&&static char* fcnname[] = &&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&"IRP_MN_START_DEVICE",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_REMOVE_DEVICE",&&&&&&&&&&&&&&&&&&&&"IRP_MN_REMOVE_DEVICE",&&&&&&&&&&&&&&&&&&&&"IRP_MN_CANCEL_REMOVE_DEVICE",&&&&&&&&&&&&&&&&&&&&"IRP_MN_STOP_DEVICE",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_STOP_DEVICE",&&&&&&&&&&&&&&&&&&&&"IRP_MN_CANCEL_STOP_DEVICE",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_DEVICE_RELATIONS",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_INTERFACE",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_CAPABILITIES",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_RESOURCES",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_RESOURCE_REQUIREMENTS",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_DEVICE_TEXT",&&&&&&&&&&&&&&&&&&&&"IRP_MN_FILTER_RESOURCE_REQUIREMENTS",&&&&&&&&&&&&&&&&&&&&"UNKNOW PNP",&&&&&&&&&&&&&&&&&&&&"IRP_MN_READ_CONFIG",&&&&&&&&&&&&&&&&&&&&"IRP_MN_WRITE_CONFIG",&&&&&&&&&&&&&&&&&&&&"IRP_MN_EJECT",&&&&&&&&&&&&&&&&&&&&"IRP_MN_SET_LOCK",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_ID",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_PNP_DEVICE_STATE",&&&&&&&&&&&&&&&&&&&&"IRP_MN_QUERY_BUS_INFORMATION",&&&&&&&&&&&&&&&&&&&&"IRP_MN_DEVICE_USAGE_NOTIFICATION",&&&&&&&&&&&&&&&&&&&&"IRP_MN_SURPRISE_REMOVAL",&&&&&&&&&&&&&&&&};&&&&&&&&&&&&&&&&////KdPrint(("PNP Request (%s)\r\n", fcnname[fcn]));&&&&&&&&&&&&&&&&switch (fcn) {&&&&&&&&&&&&&&&&&&&&&&case IRP_MN_REMOVE_DEVICE:&&&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&////KdPrint(("IRP_MN_REMOVE_DEVICE\n"));&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&IoDetachDevice(lowerDeviceObject);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&IoDeleteDevice(DeviceObject);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&IoSkipCurrentIrpStackLocation(Irp);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&return IoCallDriver(lowerDeviceObject, Irp);&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&default:&&&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&////KdPrint(("IRP_MJ_PNP -& Unknown MinorFunction : %x\n", irpsp-&MinorFunction));&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&IoSkipCurrentIrpStackLocation(Irp);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&return IoCallDriver(lowerDeviceObject, Irp);&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&}&&&&&&&&&&case IRP_MJ_READ:&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&//PFILE_OBJECT fo = irpsp-&FileO&&&&&&&&&&&&&&&&////KdPrint(("IRP_MJ_READ\n"));&&&&&&&&&&&&&&&&//设备取消例程 &&&&&&&&&&&&&&&&//IoSetCancelRoutine(Irp,CancelReadIRP);&&&&&&&&&&&&&&&&IoCopyCurrentIrpStackLocationToNext(Irp);&&&&&&&&&&&&&&&&&&//pExt-&proxyIrp = I&&&&&&&&&&&&&&&&//保存Irp&&&&&&&&&&&&&&&&/*&&&&&&&&&&&&&&&&if (pExt-&arrIrp != NULL){&&&&&&&&&&&&&&&&&&&&PLONG arrIrp = (PLONG)pExt-&arrI&&&&&&&&&&&&&&&&&&&&int i = 0;&&&&&&&&&&&&&&&&&&&&for(i = 0 ; i & 10 ; i++){&&&&&&&&&&&&&&&&&&&&&&&&if (arrIrp[i] == NULL){&&&&&&&&&&&&&&&&&&&&&&&&&&&&arrIrp[i] = (LONG)I&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&if (i & 10){&&&&&&&&&&&&&&&&&&&&&&&&////KdPrint(("保存Irp,保存序号为%d\n",i));&&&&&&&&&&&&&&&&&&&&&&&&IoSetCompletionRoutine((PIRP)arrIrp[i], ReadCompletionRoutine, DeviceObject, TRUE, TRUE, TRUE); &&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&*/&&&&&&&&&&&&&&&&return IoCallDriver(lowerDeviceObject, Irp);&&&&&&&&&&&&&&}&&&&&&&&&&default:&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&////KdPrint(("Unknown IRP : %x\n", irpsp-&MajorFunction));&&&&&&&&&&&&&&&&&&IoSkipCurrentIrpStackLocation(Irp);&&&&&&&&&&&&&&&&&&return IoCallDriver(lowerDeviceObject, Irp);&&&&&&&&&&&&&&}&&&&&&}&&} NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject){&&&&////KdPrint(("Enter AddDevice\r\n"));&&&&UNICODE_STRING DeviceName,Win32D&&&&PDEVICE_OBJECT DeviceObject = NULL;&&&&NTSTATUS&&&&PVMouse32_DEVICE_EXTENSION pExtension = NULL;&&&&UNICODE_STRING MouseClassN&&&&PVOID pTDO;&&&&&&PDRIVER_OBJECT targetDriverO&&&&PDEVICE_OBJECT curDeviceObject = NULL;&&&&PDEVICE_OBJECT filterDeviceObject = NULL;&&&&PDEVICE_OBJECT lowerDeviceObject = NULL;&&&&KeInitializeMutex(&gFilterData.ReadMutex, 0);&&&&gFilterData.ListHead.Next = NULL;&&&&gFilterData.CancelHead.Next = NULL;&&&&//创建控制设备&&&&////KdPrint(("创建控制设备\r\n"));&&&&RtlInitUnicodeString(&DeviceName,DEVICE_NAME);&&&&RtlInitUnicodeString(&Win32Device,WIN32_DEVICE);&&&&status = IoCreateDevice(DriverObject,&&&&&&&&&&&&&&&&&&&&&&&&&&&&sizeof(VMouse32_DEVICE_EXTENSION),&&&&&&&&&&&&&&&&&&&&&&&&&&&&&DeviceName,&&&&&&&&&&&&&&&&&&&&&&&&&&&&FILE_DEVICE_UNKNOWN,&&&&&&&&&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&&&&&&&&&FALSE,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&DeviceObject);&&&&if (!NT_SUCCESS(status)){&&&&&&&&CleanUP(DeviceObject);&&&&&&&&&&&&}&&&&if (!DeviceObject){&&&&&&&&return STATUS_UNEXPECTED_IO_ERROR;&&&&}&&&&pExtension = (PVMouse32_DEVICE_EXTENSION)DeviceObject-&DeviceE&&&&pExtension-&DeviceObject = DeviceO&&&&pExtension-&devName = DeviceN&&&&pExtension-&IsControlDevice = TRUE;&&&&DeviceObject-&Flags |= DO_DIRECT_IO;&&&&DeviceObject-&AlignmentRequirement = FILE_WORD_ALIGNMENT;&&&&status = IoCreateSymbolicLink(&Win32Device, &DeviceName);&&&&if (!NT_SUCCESS(status)){&&&&&&&&IoDeleteDevice(DeviceObject);&&&&&&&&&&&&}&&&&pExtension-&symLinkName = Win32D&&&&pExtension-&isSymLink = TRUE;&&&&pExtension-&IsMouseEnabled = TRUE;&&&&pExtension-&IsMouseRec = FALSE;&&&&pExtension-&beforTime.QuadPart = -1;&&&&pExtension-&dx = -1;&&&&pExtension-&dy = -1;&&&&pExtension-&mouseInit.srcMouseInit = 10000;&&&&pExtension-&mouseInit.initStatus = 0;&&&&&&&&pExtension-&KeyServiceCallback = NULL;&&&&pExtension-&MouseServiceCallback = NULL;&&&&pExtension-&kbdDeviceObject = NULL;&&&&pExtension-&mouDeviceObject = NULL;&&&&pExtension-&mouseInit.desMouseInit = -1;&&&&memset(&pExtension-&mouseDeviceObjects,0,sizeof(pExtension-&mouseDeviceObjects));&&&&memset(&curMouse,0,sizeof(curMouse));&&&&//pExtension-&proxyIrp = NULL;&&&&//pExtension-&arrIrp = NULL;&&&&DeviceObject-&Flags &= ~DO_DEVICE_INITIALIZING;&&&&status = STATUS_SUCCESS;&&&&GetKmclassInfo(DeviceObject,KEYBOARD_DEVICE);&&&&GetKmclassInfo(DeviceObject,MOUSE_DEVICE);&&&&//////KdPrint(("Leave AddDevice\r\n"));&&&&}NTSTATUS VMouse32CreateClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp){&&&&Irp-&IoStatus.Status = STATUS_SUCCESS;&&&&Irp-&rmation = 0;&&&&IoCompleteRequest(Irp, IO_NO_INCREMENT);&&&&return STATUS_SUCCESS;}NTSTATUS VMouse32DefaultHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp){&&&&Irp-&IoStatus.Status = STATUS_NOT_SUPPORTED;&&&&Irp-&rmation = 0;&&&&IoCompleteRequest(Irp, IO_NO_INCREMENT);&&&&return Irp-&IoStatus.S}//获取键盘和鼠标驱动接口地址NTSTATUS GetKmclassInfo(PDEVICE_OBJECT DeviceObject, USHORT Index){&&&&NTSTATUS&&&&&&&&&&&&&&UNICODE_STRING&&&& ObjectN&&&&PCWSTR&&&&&&&&&&&& kmhidName, kmclassName, kmN&&&&PVOID&&&&&&&&&&&&&&kmDriverS&&&&ULONG&&&&&&&&&&&&&&kmDriverS&&&&PVOID*&&&&&&&&&&&& TargetDeviceO&&&&PVOID*&&&&&&&&&&&& TargetclassC&&&&PVMouse32_DEVICE_EXTENSION&&deviceE&&&&PDRIVER_OBJECT&&&& kmDriverObject&&&&&& = NULL;&&&&PDRIVER_OBJECT&&&& kmclassDriverObject&&= NULL;&&&&deviceExtension = (PVMouse32_DEVICE_EXTENSION)DeviceObject-&DeviceE&&&&switch(Index)&&&&{&&&&case KEYBOARD_DEVICE:&&&&&&&&kmName&&&&&&&&&&&&&&= L"kbd";&&&&&&&&kmhidName&&&&&&&&&& = L"\\Driver\\kbdhid";&&&&&&&&kmclassName&&&&&&&& = L"\\Driver\\kbdclass";&&&&&&&&TargetDeviceObject&&= (PVOID*)&(deviceExtension-&kbdDeviceObject);&&&&&&&&TargetclassCallback = (PVOID*)&(deviceExtension-&KeyServiceCallback);&&&&&&&&&&&&case MOUSE_DEVICE:&&&&&&&&kmName&&&&&&&&&&&&&&= L"mou";&&&&&&&&kmhidName&&&&&&&&&& = L"\\Driver\\mouhid";&&&&&&&&kmclassName&&&&&&&& = L"\\Driver\\mouclass";&&&&&&&&TargetDeviceObject&&= (PVOID*)&(deviceExtension-&mouDeviceObject);&&&&&&&&TargetclassCallback = (PVOID*)&(deviceExtension-&MouseServiceCallback);&&&&&&&&&&&&default:&&&&&&&&return STATUS_INVALID_PARAMETER;&&&&}&&&&// 通过USB类设备获取驱动对象&&&&RtlInitUnicodeString(&ObjectName, kmhidName);&&&&status = ObReferenceObjectByName(&ObjectName,&&&&&&&&OBJ_CASE_INSENSITIVE,&&&&&&&&NULL,&&&&&&&&FILE_READ_ACCESS,&&&&&&&&*IoDriverObjectType,&&&&&&&&KernelMode,&&&&&&&&NULL,&&&&&&&&(PVOID*)&kmDriverObject);&&&&if(!NT_SUCCESS(status))&&&&{&&&&&&&&// 通过i8042prt获取驱动对象&&&&&&&&RtlInitUnicodeString(&ObjectName, L"\\Driver\\i8042prt");&&&&&&&&status = ObReferenceObjectByName(&ObjectName,&&&&&&&&&&&&OBJ_CASE_INSENSITIVE,&&&&&&&&&&&&NULL, &&&&&&&&&&&&FILE_READ_ACCESS,&&&&&&&&&&&&*IoDriverObjectType,&&&&&&&&&&&&KernelMode,&&&&&&&&&&&&NULL,&&&&&&&&&&&&(PVOID*)&kmDriverObject);&&&&&&&&if(!NT_SUCCESS(status))&&&&&&&&{&&&&&&&&&&&&////KdPrint(("Couldn't Get the i8042prt Driver Object\n"));&&&&&&&&&&&&&&&&&&&&}&&&&}&&&&// 减少引用&&&&ObDereferenceObject(kmDriverObject);&&&&// 通过kmclass获取键盘鼠标类驱动对象&&&&RtlInitUnicodeString(&ObjectName, kmclassName);&&&&status = ObReferenceObjectByName(&ObjectName,&&&&&&&&OBJ_CASE_INSENSITIVE,&&&&&&&&NULL,&&&&&&&&FILE_READ_ACCESS,&&&&&&&&*IoDriverObjectType,&&&&&&&&KernelMode,&&&&&&&&NULL,&&&&&&&&(PVOID*)&kmclassDriverObject);&&&&if(!NT_SUCCESS(status))&&&&{&&&&&&&&////KdPrint(("Couldn't Get the kmclass Driver Object\n"));&&&&&&&&&&&&}&&&&// 减少引用&&&&ObDereferenceObject(kmclassDriverObject);&&&&kmDriverStart = kmclassDriverObject-&DriverS&&&&kmDriverSize&&= kmclassDriverObject-&DriverS&&&&ULONG&&&&&&&&&&&& DeviceExtensionS&&&&PULONG&&&&&&&&&&&&kmDeviceE&&&&PDEVICE_OBJECT&&&&kmTempDeviceO&&&&PDEVICE_OBJECT&&&&kmclassDeviceO&&&&PDEVICE_OBJECT&&&&kmDeviceObject = kmDriverObject-&DeviceO&&&&ULONG kmSeq = 0;&&&&ULONG classSeq = 0;&&&&if (MOUSE_DEVICE == Index){&&&&&&&&kmclassDeviceObject = kmclassDriverObject-&DeviceO&&&&&&&&&&&&deviceExtension-&mouseDeviceObjects[1] = (PDEVICE_OBJECT)(kmclassDeviceObject);&&&&&&&&kmclassDeviceObject = kmclassDeviceObject-&NextD&&&&&&&&deviceExtension-&mouseDeviceObjects[0] = (PDEVICE_OBJECT)(kmclassDeviceObject);&&&&&&&&////KdPrint(("mouseDeviceObjects[0]=0x%x,mouseDeviceObjects[1]=0x%x\r\n",deviceExtension-&mouseDeviceObjects[0],&&&&&&&&//&&&&deviceExtension-&mouseDeviceObjects[1]));&&&&}&&&&while (kmDeviceObject){&&&&&&&&kmSeq = kmSeq + 1;&&&&&&&&kmTempDeviceObject = kmDeviceO&&&&&&&&classSeq = 0;&&&&&&&&kmDeviceExtension&& = (PULONG)kmTempDeviceObject-&DeviceE&&&&&&&&DeviceExtensionSize = ((ULONG)kmTempDeviceObject-&DeviceObjectExtension - (ULONG)kmTempDeviceObject-&DeviceExtension) / 4;&&&&&&&&kmclassDeviceObject = kmclassDriverObject-&DeviceO&&&&&&&&while(kmclassDeviceObject){&&&&&&&&&&&&classSeq = classSeq + 1;&&&&&&&&&&&&*TargetDeviceObject = NULL;&&&&&&&&&&&&*TargetclassCallback = NULL;&&&&&&&&&&&&////KdPrint(("kmSeq=%d;classSeq=%d\n",kmSeq,classSeq));&&&&&&&&&&&&for(ULONG i = 0; i & DeviceExtensionS i++){&&&&&&&&&&&&&&&&&&&&if (kmDeviceExtension[i] == (ULONG)kmclassDeviceObject &&&&&&&&&&&&&&&&&&&&&&kmDeviceExtension[i + 1] & (ULONG)kmDriverStart&&&&&&&&&&&&&&&&&&&&&&&&&&kmDeviceExtension[i + 1] & (ULONG)kmDriverStart + kmDriverSize)&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&// 将获取到的设备对象保存到自定义扩展设备结构&&&&&&&&&&&&&&&&&&&&&&&&*TargetDeviceObject&&= (PVOID)kmclassDeviceO&&&&&&&&&&&&&&&&&&&&&&&&*TargetclassCallback = (PVOID)kmDeviceExtension[i + 1];&&&&&&&&&&&&&&&&&&&&&&&&//KdPrint(("%SDeviceObject == 0x%x\n", kmName, kmDeviceExtension[i]));&&&&&&&&&&&&&&&&&&&&&&&&//KdPrint(("%SClassServiceCallback == 0x%x\n", kmName, kmDeviceExtension[i + 1]));&&&&&&&&&&&&&&&&&&&&&&&&return STATUS_SUCCESS;&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&kmclassDeviceObject = kmclassDeviceObject-&NextD&&&&&&&&}&&&&&&&&kmDeviceObject = kmDeviceObject-&NextD&&&&}&&&&return STATUS_UNSUCCESSFUL;}NTSTATUS DispatchControlDevice(&&&&&&&&&&IN PDEVICE_OBJECT DeviceObject,&&&&&&&&&&IN PIRP Irp&&&&&&&&&&)&&{&&&&NTSTATUS&&&&PIO_STACK_LOCATION irpsp = IoGetCurrentIrpStackLocation(Irp);&&&&PIRP&&&&&&&&&&&&&&&&newI&&&&KEVENT&&&&&&&&&&&&&&&&&&IO_STATUS_BLOCK&&&& ioS&&&&if (irpsp-&MajorFunction == IRP_MJ_DEVICE_CONTROL)&&&&{&&&&&&&&////KdPrint(("DispatchControlDevice\r\n"));&&&&&&&&return DispatchIrpDeviceControl(DeviceObject, Irp);&&&&}&&&&&&&&status = STATUS_SUCCESS;&&&&Irp-&IoStatus.Status =&&&&Irp-&rmation = 0;&&&&IoCompleteRequest(Irp, IO_NO_INCREMENT);&&&&}//控制Irp处理NTSTATUS DispatchIrpDeviceControl(&&&&&&&&&&IN PDEVICE_OBJECT DeviceObject,&&&&&&&&&&IN PIRP Irp&&&&&&&&&&)&&{&&&&NTSTATUS status = STATUS_SUCCESS;&&&&PIO_STACK_LOCATION irpsp = IoGetCurrentIrpStackLocation(Irp); &&&&PVOID ioBuffer = Irp-&AssociatedIrp.SystemB&&&&//PKEYBOARD_INPUT_DATA KbdInputDataStart, KbdInputDataE&&&&//PMOUSE_INPUT_DATA MouseInputDataStart, MouseInputDataE&&&&PVMouse32_DEVICE_EXTENSION pExt = ((PVMouse32_DEVICE_EXTENSION)DeviceObject-&DeviceExtension);&&&&ULONG inputLen = irpsp-&Parameters.DeviceIoControl.InputBufferL&&&&ULONG InputDataC&&&&NEW_MOUSE_DATA&&&&NEW_KEY_DATA&&&&switch (irpsp-&Parameters.DeviceIoControl.IoControlCode)&&&&{&&&&&&&&case IOCTL_MOUSE:&&&&&&&&{&&&&&&&&&&&&if (ioBuffer && inputLen == sizeof(NEW_MOUSE_DATA)){&&&&&&&&&&&&&&&&////KdPrint(("接收到应用层的鼠标操作请求\r\n"));&&&&&&&&&&&&&&&&//显示输入缓冲区数据&&&&&&&&&&&&&&&&if (pExt-&KeyServiceCallback == NULL){&&&&&&&&&&&&&&&&&&&&////KdPrint(("错误:鼠标回调函数为空!\r\n"));&&&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&&&memcpy(&mid, ioBuffer,inputLen);&&&&&&&&&&&&&&&&&&&&if (RunCheck()){&&&&&&&&&&&&&&&&&&&&&&&&pExt-&mouseInit.desMouseInit = pExt-&mouseInit.srcMouseI&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&mid.mouseData.LastX = mid.mouseData.LastX - ((pExt-&mouseInit.srcMouseInit - pExt-&mouseInit.desMouseInit) && 8);&&&&&&&&&&&&&&&&&&&&mid.mouseData.LastY = mid.mouseData.LastY - ((pExt-&mouseInit.srcMouseInit - pExt-&mouseInit.desMouseInit) && 8);&&&&&&&&&&&&&&&&&&&&//mid.ExtraInformation = 2;&&&&&&&&&&&&&&&&&&&&//MouseInputDataStart = &(mid.mouseData);&&&&&&&&&&&&&&&&&&&&//MouseInputDataEnd = MouseInputDataStart + 1;&&&&&&&&&&&&&&&&&&&&PDEVICE_OBJECT doDeviceObject = (PDEVICE_OBJECT)pExt-&mouseDeviceObjects[mid.mouseData.UnitId - 1];&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&pExt-&MouseServiceCallback(doDeviceObject,&&&&&&&&&&&&&&&&&&&&&&&&&(mid.mouseData),&&&&&&&&&&&&&&&&&&&&&&&&&(mid.mouseData) + 1, &&&&&&&&&&&&&&&&&&&&&&&&&InputDataConsumed);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/*&&&&&&&&&&&&&&&&&&&&pExt-&MouseServiceCallback(pExt-&mouseDeviceObjects[0],&&&&&&&&&&&&&&&&&&&&&&&&MouseInputDataStart,&&&&&&&&&&&&&&&&&&&&&&&&MouseInputDataEnd, &&&&&&&&&&&&&&&&&&&&&&&&&InputDataConsumed);&&&&&&&&&&&&&&&&&&&&*/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&status = STATUS_SUCCESS;&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&////KdPrint(("鼠标操作请求的参数解析错误\r\n"));&&&&&&&&&&&&&&&&status = STATUS_INVALID_PARAMETER;&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&}&&&&&&&&case IOCTL_KEY:&&&&&&&&&&&&&&&&if (ioBuffer && inputLen == sizeof(NEW_KEY_DATA)){&&&&&&&&&&&&&&&&//KdPrint(("接收到应用层的键盘操作请求\r\n"));&&&&&&&&&&&&&&&&//显示输入缓冲区数据&&&&&&&&&&&&&&&&if (pExt-&KeyServiceCallback == NULL){&&&&&&&&&&&&&&&&&&&&////KdPrint(("错误:键盘回调函数为空!\r\n"));&&&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&&&memcpy(&kid, ioBuffer,inputLen);&&&&&&&&&&&&&&&&&&&&//KbdInputDataStart = &&&&&&&&&&&&&&&&&&&&&//KbdInputDataEnd = KbdInputDataStart + 1;&&&&&&&&&&&&&&&&&&&&pExt-&KeyServiceCallback(pExt-&kbdDeviceObject,&&&&&&&&&&&&&&&&&&&&&&&&&(kid.keyData),&&&&&&&&&&&&&&&&&&&&&&&&&(kid.keyData) + 1, &&&&&&&&&&&&&&&&&&&&&&&&&InputDataConsumed);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&status = STATUS_SUCCESS;&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&////KdPrint(("键盘操作请求的参数解析错误\r\n"));&&&&&&&&&&&&&&&&status = STATUS_INVALID_PARAMETER;&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&case IOCTL_MOUSEDISABLED:&&&&&&&&&&&&{&&&&&&&&&&&&&&&&/*&&&&&&&&&&&&&&&&PDEVICE_OBJECT nextDevice = DeviceObject-&NextD&&&&&&&&&&&&&&&&while(nextDevice){&&&&&&&&&&&&&&&&&&&&PVMouse32_DEVICE_EXTENSION pNextExt = ((PVMouse32_DEVICE_EXTENSION)nextDevice-&DeviceExtension);&&&&&&&&&&&&&&&&&&&&pNextExt-&IsMouseEnabled = FALSE;&&&&&&&&&&&&&&&&&&&&nextDevice = nextDevice-&NextD&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&*/&&&&&&&&&&&&&&&&////KdPrint(("--锁定鼠标IsMouseEnabled=FALSE\r\n"));&&&&&&&&&&&&&&&&pExt-&IsMouseEnabled = FALSE;&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&case IOCTL_MOUSEENABLED:&&&&&&&&&&&&{&&&&&&&&&&&&&&&&////KdPrint(("--锁定鼠标IsMouseEnabled=TRUE\r\n"));&&&&&&&&&&&&&&&&pExt-&IsMouseEnabled = TRUE;&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&case IOCTL_INIT:&&&&//初始化驱动&&&&&&&&&&&&{&&&&&&&&&&&&&&&&if (ioBuffer){&&&&&&&&&&&&&&&&&&&&UCHAR mp[200];&&&&&&&&&&&&&&&&&&&&memcpy(&mp, ioBuffer,inputLen);&&&&&&&&&&&&&&&&&&&&pExt-&mouseInit.srcMouseInit = 0;&&&&&&&&&&&&&&&&&&&&KdPrint(("init mp=%s\r\n",mp));&&&&&&&&&&&&&&&&&&&&KdPrint(("==pExt-&mouseInit.srcMouseInit=%d\r\n",pExt-&mouseInit.srcMouseInit));&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&for(ULONG ii = 0; ii & inputL ii++){&&&&&&&&&&&&&&&&&&&&&&&&pExt-&mouseInit.srcMouseInit = pExt-&mouseInit.srcMouseInit + mp[ii];&&&&&&&&&&&&&&&&&&&&&&&&KdPrint(("pExt-&mouseInit.srcMouseInit=%d,mp[%d]=%d\r\n",pExt-&mouseInit.srcMouseInit,ii,mp[ii]));&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&KdPrint(("pExt-&mouseInit.srcMouseInit=%d\r\n",pExt-&mouseInit.srcMouseInit));&&&&&&&&&&&&&&&&&&&&status = STATUS_SUCCESS;&&&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&&&////KdPrint(("键盘操作请求的参数解析错误\r\n"));&&&&&&&&&&&&&&&&&&&&status = STATUS_INVALID_PARAMETER;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&case IOCTL_REG:&&&&&&&&//驱动注册,8进制&&&&&&&&&&&&{&&&&&&&&&&&&&&&&if (ioBuffer){&&&&&&&&&&&&&&&&&&&&char mp[200];&&&&&&&&&&&&&&&&&&&&memcpy(&mp, ioBuffer,inputLen);&&&&&&&&&&&&&&&&&&&&KdPrint(("inputLen=%d\r\n",inputLen));&&&&&&&&&&&&&&&&&&&&KdPrint(("Reg mp=%s\r\n",mp));&&&&&&&&&&&&&&&&&&&&ULONG newData = 0;&&&&&&&&&&&&&&&&&&&&for(ULONG ii = 0; ii & inputL ii++){&&&&&&&&&&&&&&&&&&&&&&&&if (newData == 0){&&&&&&&&&&&&&&&&&&&&&&&&&&&&newData = (mp[ii] - 48);&&&&&&&&&&&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&&&&&&&&&&&newData = (newData && 3) + (mp[ii] - 48);&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&//KdPrint(("newData=%d\r\n",newData));&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&pExt-&mouseInit.desMouseInit = newD&&&&&&&&&&&&&&&&&&&&KdPrint(("pExt-&mouseInit.desMouseInit=%d\r\n",pExt-&mouseInit.desMouseInit));&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&default:&&&&&&&&&&&&status = STATUS_INVALID_PARAMETER;&&&&}&&&&//////KdPrint(("set g_enable_filter: %d\r\n", g_enable_filter));&&&&Irp-&IoStatus.Status =&&&&Irp-&rmation = 0;&&&&IoCompleteRequest(Irp, IO_NO_INCREMENT);&&&&return STATUS_SUCCESS;}VOID CancelReadIRP(IN PDEVICE_OBJECT DeviceObject,IN PIRP pIrp){&&////KdPrint(("\nEnter CancelReadIRP\n"));&&pIrp-&IoStatus.Status=STATUS_CANCELLED;&&pIrp-&rmation=0;&&IoCompleteRequest(pIrp,0);&&IoReleaseCancelSpinLock(pIrp-&CancelIrql);//释放取消锁&&////KdPrint(("\nLeave CancelReadIRP\n"));}BOOLEAN CancelIrp(PIRP pIrp)&&{&&&&&&if(pIrp==NULL)&&&&&&{&&&&&&&&&&////KdPrint(("取消irp错误.../n")); &&&&&&&&return FALSE;&&&&&&}&&&&&&if(pIrp-&Cancel || pIrp-&CancelRoutine==NULL)&&&&&&{&&&&&&&&&&////KdPrint(("取消irp错误.../n"));&&&&&&&&&&return FALSE;&&&&&&}&&&&&&if(FALSE==IoCancelIrp(pIrp))&&&&&&{&&&&&&&&&&////KdPrint(("IoCancelIrp to irp错误.../n/n")); &&&&&&&&return FALSE;&&&&&&}&&&&&&&&&&&&//取消后重设此例为空&&&&&&IoSetCancelRoutine(pIrp,NULL);&&&&&&return TRUE;&&}void VMouse32Unload(IN PDRIVER_OBJECT DriverObject){&&&&////KdPrint(("Enter VMouse32Unload\r\n"));&&&&isRun = 0;&&&&fileOperType = CLOSE_MOUSE_REC;&&&&KeSetEvent(&event, (KPRIORITY)0, FALSE);&&&&CleanUP(DriverObject-&DeviceObject);&&&&////KdPrint(("Leave VMouse32Unload\r\n"));}void MyCurTimeStr(WCHAR * time_str){&& LARGE_INTEGER snow,&& TIME_FIELDS now_&& //static WCHAR time_str[32] = { 0 };&& // 获得标准时间&& KeQuerySystemTime(&snow);&& // 转换为当地时间&& ExSystemTimeToLocalTime(&snow,&now);&& // 转换为人类可以理解的时间要素&& RtlTimeToTimeFields(&now,&now_fields);&& // 打印到字符串中&& RtlStringCchPrintfW(&&&&time_str,&&&&32*2,&&&&L"%4d-%2d-%2d %2d:%2d:%2d %2d",&&&&now_fields.Year,now_fields.Month,now_fields.Day,&&&&now_fields.Hour,now_fields.Minute,now_fields.Second,now_fields.Milliseconds);&& //return time_}//复制文件BOOLEAN MyCopyFile(IN PUNICODE_STRINGustrDestFile,IN PUNICODE_STRINGustrSrcFile){&&&&HANDLE&&&&hSrcFile, hDestF&&&&PVOID&&&&buffer = NULL;&&&&ULONG&&&&length = 0;&&&&LARGE_INTEGER&&&&offset = {0};&&&&IO_STATUS_BLOCK Io_Status_Block = {0};&&&&OBJECT_ATTRIBUTES obj_&&&&NTSTATUS&&&&BOOLEAN&&&&bRet = FALSE;&&&&do&&&&{&&&&&&&&// 打开源文件&&&&&&&&InitializeObjectAttributes(&&&&&&&&&obj_attrib,&&&&&&&&ustrSrcFile,&&&&&&&&OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,&&&&&&&&NULL,&&&&&&&&NULL);&&&&&&&&status = ZwCreateFile(&&&&&&&&&hSrcFile,&&&&&&&&GENERIC_READ,&&&&&&&&&obj_attrib,&&&&&&&&&Io_Status_Block,&&&&&&&&NULL,&&&&&&&&FILE_ATTRIBUTE_NORMAL,&&&&&&&&FILE_SHARE_READ,&&&&&&&&FILE_OPEN,&&&&&&&&FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT,&&&&&&&&NULL,&&&&&&&&0 );&&&&&&&&if (!NT_SUCCESS(status))&&&&&&&&{&&&&&&&&&&&&bRet = FALSE;&&&&&&&&&&&&goto END;&&&&&&&&}&&&&&&&&// 打开目标文件&&&&&&&&InitializeObjectAttributes(&&&&&&&&&obj_attrib,&&&&&&&&ustrDestFile,&&&&&&&&OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,&&&&&&&&NULL,&&&&&&&&NULL);&&&&&&&&status = ZwCreateFile(&&&&&&&&&hDestFile,&&&&&&&&GENERIC_WRITE,&&&&&&&&&obj_attrib,&&&&&&&&&Io_Status_Block,&&&&&&&&NULL,&&&&&&&&FILE_ATTRIBUTE_NORMAL,&&&&&&&&FILE_SHARE_READ,&&&&&&&&FILE_OPEN_IF,&&&&&&&&FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT,&&&&&&&&NULL,&&&&&&&&0 );&&&&&&&&if (!NT_SUCCESS(status))&&&&&&&&{&&&&&&&&&&&&bRet = FALSE;&&&&&&&&&&&&goto END;&&&&&&&&}&&&&&&&&// 为 buffer 分配4KB 空间&&&&&&&&buffer = ExAllocatePool(NonPagedPool, 1024 * 4);&&&&&&&&if (buffer == NULL)&&&&&&&&{&&&&&&&&&&&&bRet = FALSE;&&&&&&&&&&&&goto END;&&&&&&&&}&&&&&&&&// 复制文件&&&&&&&&while (1)&&&&&&&&{&&&&&&&&&&&&length = 4 * 1024;&&&&&&&&&&&&// 读取源文件&&&&&&&&&&&&status = ZwReadFile(hSrcFile,&&&&&&&&&&&&NULL,&&&&&&&&&&&&NULL,&&&&&&&&&&&&NULL,&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&buffer,&&&&&&&&&&&&length,&&&&&&&&&&&&&offset,&&&&&&&&&&&&NULL);&&&&&&&&&&&&if (!NT_SUCCESS(status))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&// 如果状态为 STATUS_END_OF_FILE,说明文件已经读取到末尾&&&&&&&&&&&&&&&&if (status == STATUS_END_OF_FILE)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&bRet = TRUE;&&&&&&&&&&&&&&&&&&&&goto END;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&// 获得实际读取的长度&&&&&&&&&&&&length = Io_&&&&&&&&&&&&// 写入到目标文件&&&&&&&&&&&&status = ZwWriteFile(&&&&&&&&&&&&hDestFile,&&&&&&&&&&&&NULL,&&&&&&&&&&&&NULL,&&&&&&&&&&&&NULL,&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&buffer,&&&&&&&&&&&&length,&&&&&&&&&&&&&offset,&&&&&&&&&&&&NULL);&&&&&&&&&&&&if (!NT_SUCCESS(status))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&bRet = FALSE;&&&&&&&&&&&&&&&&goto END;&&&&&&&&&&&&}&&&&&&&&&&&&// 移动文件指针&&&&&&&&&&&&offset.QuadPart +=&&&&&&&&}&&&&} while (0);END:&&&&if (hSrcFile)&&&&{&&&&ZwClose(hSrcFile);&&&&}&&&&if (hDestFile)&&&&{&&&&&&&&ZwClose(hDestFile);&&&&}&&&&if (buffer != NULL)&&&&{&&&&&&&&ExFreePool(buffer);&&&&}&&&&return bR}LONGLONG MakeMilSec(){&&&&ULONG&&&&&&&&&&&&&&&&LARGE_INTEGER MilSecT&&&&inc = KeQueryTimeIncrement();&&&&KeQueryTickCount(&MilSecTime);&&&&MilSecTime.QuadPart *=&&&&MilSecTime.QuadPart /= 10000;&&&&//KdPrint(("time2=%d\r\n", MilSecTime.QuadPart ));&&&&return MilSecTime.QuadP}VOID FileDiskThread(IN PVOID Context){&&&&HANDLE hDestFile = NULL;&&&&OBJECT_ATTRIBUTES obj_&&&&NTSTATUS&&&&UNICODE_STRING ustrDestF&&&&IO_STATUS_BLOCK Io_Status_Block = {0};&&&&LARGE_INTEGER&&&&&&&&char dataBuffer[100] = {0};&&&&PVMouse32_DEVICE_EXTENSION pdex = NULL;&&&&if (gDriverObject){&&&&&&&&pdex = (PVMouse32_DEVICE_EXTENSION)gDriverObject-&DeviceObject-&DeviceE&&&&}&&&&RtlInitUnicodeString(&ustrDestFile, DESTFILE);&& while(isRun == 1)&& {&&&& KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);&&&& switch(fileOperType)&&&& {&&&&&&&&case CREATE_MOUSE_REC:&&&&&&&&&&&&{&&&&&&&&&&&&&&&&// 打开目标文件&&&&&&&&&&&&&&&&InitializeObjectAttributes(&&&&&&&&&&&&&&&&&obj_attrib,&&&&&&&&&&&&&&&&&ustrDestFile,&&&&&&&&&&&&&&&&OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&NULL);&&&&&&&&&&&&&&&&status = ZwCreateFile(&&&&&&&&&&&&&&&&&hDestFile,&&&&&&&&&&&&&&&&GENERIC_WRITE,&&&&&&&&&&&&&&&&&obj_attrib,&&&&&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&FILE_ATTRIBUTE_NORMAL,&&&&&&&&&&&&&&&&FILE_SHARE_READ,&&&&&&&&&&&&&&&&FILE_OPEN_IF,&&&&&&&&&&&&&&&&FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT,&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&0 );&&&&&&&&&&&&&&&&if (!NT_SUCCESS(status))&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&status = STATUS_INVALID_PARAMETER;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&pdex-&beforTime.QuadPart = MakeMilSec();&&&&//保存时间&&&&&&&&&&&&&&&&offset.QuadPart = 0;&&&&&&&&&&&&&&&&pdex-&IsMouseRec = TRUE;&&&&&&&&&&&&&&&&pdex-&curX = 0;&&&&&&&&&&&&&&&&pdex-&curY = 0;&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&case WRITE_MOUSE_REC:&&&&&&&&&&&&{&&&&&&&&&&&&&&&&IO_STATUS_BLOCK Io_Status_Block = {0};&&&&&&&&&&&&&&&&LARGE_INTEGER curTime = {0};&&&&&&&&&&&&&&&&NTSTATUS&&&&&&&&&&&&&&&&// 获得实际读取的长度&&&&&&&&&&&&&&&&ULONG length = 0;&&&&&&&&&&&&&&&&curTime.QuadPart = MakeMilSec();&&&&&&&&&&&&&&&&//计算秒数&&&&&&&&&&&&&&&&if (curTime.QuadPart - pdex-&beforTime.QuadPart & 0){&&&&&&&&&&&&&&&&&&&&////KdPrint(("time=%d\r\n", (curTime.QuadPart - pdex-&beforTime.QuadPart) ));&&&&&&&&&&&&&&&&&&&&//写等待时间&&&&&&&&&&&&&&&&&&&&ANSI_STRING&&&&&&&&&&&&&&&&&&&&// 打印到字符串中&&&&&&&&&&&&&&&&&&&&RtlStringCchPrintfA(&&&&&&&&&&&&&&&&&&&&dataBuffer,&&&&&&&&&&&&&&&&&&&&100,&&&&&&&&&&&&&&&&&&&&"等待(%d);\r\n",&&&&&&&&&&&&&&&&&&&&curTime.QuadPart - pdex-&beforTime.QuadPart);&&&&&&&&&&&&&&&&&&&&RtlInitAnsiString(&buffer, dataBuffer);&&&&&&&&&&&&&&&&&&&&length = buffer.L&&&&&&&&&&&&&&&&&&&&// 写入到目标文件&&&&&&&&&&&&&&&&&&&&status = ZwWriteFile(&&&&&&&&&&&&&&&&&&&&hDestFile,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&&&&&&&&&buffer.Buffer,&&&&&&&&&&&&&&&&&&&&length,&&&&&&&&&&&&&&&&&&&&&offset,&&&&&&&&&&&&&&&&&&&&NULL);&&&&&&&&&&&&&&&&&&&&// 移动文件指针&&&&&&&&&&&&&&&&&&&&offset.QuadPart +=&&&&&&&&&&&&&&&&&&&&pdex-&beforTime.QuadPart = curTime.QuadP&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&//保存鼠标操作&&&&&&&&&&&&&&&&if (curMouse.ButtonFlags == 0){&&&&//移动&&&&&&&&&&&&&&&&&&&&//写移动命令&&&&&&&&&&&&&&&&&&&&ANSI_STRING&&&&&&&&&&&&&&&&&&&&// 打印到字符串中&&&&&&&&&&&&&&&&&&&&RtlStringCchPrintfA(&&&&&&&&&&&&&&&&&&&&dataBuffer,&&&&&&&&&&&&&&&&&&&&100,&&&&&&&&&&&&&&&&&&&&"移动鼠标(0,鼠标转屏幕坐标X(%d),鼠标转屏幕坐标Y(%d));\r\n",&&&&&&&&&&&&&&&&&&&&curMouse.LastX,curMouse.LastY);&&&&&&&&&&&&&&&&&&&&RtlInitAnsiString(&buffer, dataBuffer);&&&&&&&&&&&&&&&&&&&&length = buffer.L&&&&&&&&&&&&&&&&&&&&// 写入到目标文件&&&&&&&&&&&&&&&&&&&&status = ZwWriteFile(&&&&&&&&&&&&&&&&&&&&hDestFile,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&&&&&&&&&buffer.Buffer,&&&&&&&&&&&&&&&&&&&&length,&&&&&&&&&&&&&&&&&&&&&offset,&&&&&&&&&&&&&&&&&&&&NULL);&&&&&&&&&&&&&&&&&&&&// 移动文件指针&&&&&&&&&&&&&&&&&&&&offset.QuadPart +=&&&&&&&&&&&&&&&&&&&&pdex-&dx = curMouse.LastX;&&&&&&&&&&&&&&&&&&&&pdex-&dy = curMouse.LastY;&&&&&&&&&&&&&&&&&&&&pdex-&curX = 0;&&&&&&&&&&&&&&&&&&&&pdex-&curY = 0;&&&&&&&&&&&&&&&&}else if (curMouse.ButtonFlags == 0x0001){&&&&//按下鼠标左键&&&&&&&&&&&&&&&&&&&&//写等待时间&&&&&&&&&&&&&&&&&&&&ANSI_STRING&&&&&&&&&&&&&&&&&&&&RtlInitAnsiString(&buffer, "按下鼠标左键();\r\n");&&&&&&&&&&&&&&&&&&&&length = buffer.L&&&&&&&&&&&&&&&&&&&&// 写入到目标文件&&&&&&&&&&&&&&&&&&&&status = ZwWriteFile(&&&&&&&&&&&&&&&&&&&&hDestFile,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&&&&&&&&&buffer.Buffer,&&&&&&&&&&&&&&&&&&&&length,&&&&&&&&&&&&&&&&&&&&&offset,&&&&&&&&&&&&&&&&&&&&NULL);&&&&&&&&&&&&&&&&&&&&// 移动文件指针&&&&&&&&&&&&&&&&&&&&offset.QuadPart +=&&&&&&&&&&&&&&&&}else if (curMouse.ButtonFlags == 0x0002){&&&&//弹起鼠标左键&&&&&&&&&&&&&&&&&&&&//写等待时间&&&&&&&&&&&&&&&&&&&&ANSI_STRING&&&&&&&&&&&&&&&&&&&&RtlInitAnsiString(&buffer, "弹起鼠标左键();\r\n");&&&&&&&&&&&&&&&&&&&&length = buffer.L&&&&&&&&&&&&&&&&&&&&// 写入到目标文件&&&&&&&&&&&&&&&&&&&&status = ZwWriteFile(&&&&&&&&&&&&&&&&&&&&hDestFile,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&&&&&&&&&buffer.Buffer,&&&&&&&&&&&&&&&&&&&&length,&&&&&&&&&&&&&&&&&&&&&offset,&&&&&&&&&&&&&&&&&&&&NULL);&&&&&&&&&&&&&&&&&&&&// 移动文件指针&&&&&&&&&&&&&&&&&&&&offset.QuadPart +=&&&&&&&&&&&&&&&&}else if (curMouse.ButtonFlags == 0x0004){&&&&//按下鼠标右键&&&&&&&&&&&&&&&&&&&&//写等待时间&&&&&&&&&&&&&&&&&&&&ANSI_STRING&&&&&&&&&&&&&&&&&&&&RtlInitAnsiString(&buffer, "按下鼠标右键();\r\n");&&&&&&&&&&&&&&&&&&&&length = buffer.L&&&&&&&&&&&&&&&&&&&&// 写入到目标文件&&&&&&&&&&&&&&&&&&&&status = ZwWriteFile(&&&&&&&&&&&&&&&&&&&&hDestFile,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&&&&&&&&&buffer.Buffer,&&&&&&&&&&&&&&&&&&&&length,&&&&&&&&&&&&&&&&&&&&&offset,&&&&&&&&&&&&&&&&&&&&NULL);&&&&&&&&&&&&&&&&&&&&// 移动文件指针&&&&&&&&&&&&&&&&&&&&offset.QuadPart +=&&&&&&&&&&&&&&&&}else if (curMouse.ButtonFlags == 0x0008){&&&&//弹起鼠标右键&&&&&&&&&&&&&&&&&&&&//写等待时间&&&&&&&&&&&&&&&&&&&&ANSI_STRING&&&&&&&&&&&&&&&&&&&&RtlInitAnsiString(&buffer, "弹起鼠标右键();\r\n");&&&&&&&&&&&&&&&&&&&&length = buffer.L&&&&&&&&&&&&&&&&&&&&// 写入到目标文件&&&&&&&&&&&&&&&&&&&&status = ZwWriteFile(&&&&&&&&&&&&&&&&&&&&hDestFile,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&&&&&&&&&buffer.Buffer,&&&&&&&&&&&&&&&&&&&&length,&&&&&&&&&&&&&&&&&&&&&offset,&&&&&&&&&&&&&&&&&&&&NULL);&&&&&&&&&&&&&&&&&&&&// 移动文件指针&&&&&&&&&&&&&&&&&&&&offset.QuadPart +=&&&&&&&&&&&&&&&&}else if (curMouse.ButtonFlags == 0x400){&&&&//滚动&&&&&&&&&&&&&&&&&&&&//写等待时间&&&&&&&&&&&&&&&&&&&&ANSI_STRING&&&&&&&&&&&&&&&&&&&&// 打印到字符串中&&&&&&&&&&&&&&&&&&&&if (curMouse.ButtonData == 0x78){&&&&//向前滚动&&&&&&&&&&&&&&&&&&&&&&&&RtlInitAnsiString(&buffer, "滚动鼠标(0);\r\n");&&&&&&&&&&&&&&&&&&&&}else if (curMouse.ButtonData == 0xFF88){&&&&&&&&&&&&&&&&&&&&&&&&RtlInitAnsiString(&buffer, "滚动鼠标(1);\r\n");&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&length = buffer.L&&&&&&&&&&&&&&&&&&&&// 写入到目标文件&&&&&&&&&&&&&&&&&&&&status = ZwWriteFile(&&&&&&&&&&&&&&&&&&&&hDestFile,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&NULL,&&&&&&&&&&&&&&&&&&&&&Io_Status_Block,&&&&&&&&&&&&&&&&&&&&buffer.Buffer,&&&&&&&&&&&&&&&&&&&&length,&&&&&&&&&&&&&&&&&&&&&offset,&&&&&&&&&&&&&&&&&&&&NULL);&&&&&&&&&&&&&&&&&&&&// 移动文件指针&&&&&&&&&&&&&&&&&&&&offset.QuadPart +=&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&fileOperType = 0;&&&&&&&&&&&&&&&&&&&&case CLOSE_MOUSE_REC:&&&&&&&&&&&&{&&&&&&&&&&&&&&&&if (pdex-&beforTime.QuadPart & -1){&&&&&&&&&&&&&&&&&&&&pdex-&IsMouseRec = FALSE;&&&&&&&&&&&&&&&&&&&&pdex-&beforTime.QuadPart = -1;&&&&&&&&&&&&&&&&&&&&offset.QuadPart = -1;&&&&&&&&&&&&&&&&&&&&//关闭文件&&&&&&&&&&&&&&&&&&&&if (hDestFile)&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&ZwClose(hDestFile);&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&if (isRun == 0){&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&&&&& }&& }}BOOLEAN RunCheck(){&&&&BOOLEAN bltRet = FALSE;&&&&&&&&LARGE_INTEGER snow,&&&&TIME_FIELDS now_&&&&//static WCHAR time_str[32] = { 0 };&&&&// 获得标准时间&&&&KeQuerySystemTime(&snow);&&&&// 转换为当地时间&&&&ExSystemTimeToLocalTime(&snow,&now);&&&&// 转换为人类可以理解的时间要素&&&&RtlTimeToTimeFields(&now,&now_fields);&&&&if ((now_fields.Year == 2013 && now_fields.Month == 12 && now_fields.Day &= 6) || (now_fields.Year == 2014 && now_fields.Month == 1 && now_fields.Day &= 6)){&&&&&&&&bltRet = TRUE;&&&&}&&&&return bltR}
发表评论:
TA的最新馆藏}

我要回帖

更多关于 漫画脚本怎么写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信