能力值:
( LV2,RANK:10 )
|
-
-
76 楼
很流弊的东西!
|
能力值:
( LV2,RANK:10 )
|
-
-
77 楼
Mark
|
能力值:
( LV2,RANK:10 )
|
-
-
78 楼
大牛能对应新系统更新下吗
|
能力值:
( LV4,RANK:50 )
|
-
-
79 楼
请问一下,我在虚拟机里面加载楼主的64位驱动,显示PS和USB借口的鼠标同时存在,但是为什么我仿照写了之后就一个都检测不到呢?代码如下
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString) { NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING ustrLinkName; UNICODE_STRING ustrDevName; PDEVICE_OBJECT pDevObj; //设置分发函数和卸载例程 pDriverObj->MajorFunction[IRP_MJ_CREATE] = DispatchCreate; pDriverObj->MajorFunction[IRP_MJ_CLOSE] = DispatchClose; pDriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchIoctl; pDriverObj->DriverUnload = DriverUnload; //创建一个设备 RtlInitUnicodeString(&ustrDevName, DEVICE_NAME); status = IoCreateDevice(pDriverObj, 0, &ustrDevName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pDevObj); if(!NT_SUCCESS(status)) return status;
status = IoCreateSymbolicLink(&ustrLinkName, &ustrDevName); if(!NT_SUCCESS(status)) { IoDeleteDevice(pDevObj); return status; } DbgPrint("DriverEntry\n"); pDevObj->Flags |= DO_DIRECT_IO; pDevObj->AlignmentRequirement = FILE_WORD_ALIGNMENT; status = SearchMouServiceCallBack(pDriverObj); if (!NT_SUCCESS(status)) { KdPrint(("MOUSE_DEVICE ERROR, error = 0x%08lx\n", status)); return status; } //返回加载驱动的状态(如果返回失败,驱动讲被清除出内核空间) pDevObj->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS_SUCCESS; }
NTSTATUS SearchMouServiceCallBack(PDRIVER_OBJECT DriverObject) { //定义用到的一组全局变量,这些变量大多数是顾名思义的 NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING uniNtNameString; PDEVICE_OBJECT pTargetDeviceObject = NULL; PDRIVER_OBJECT KbdDriverObject = NULL; PDRIVER_OBJECT KbdhidDriverObject = NULL; PDRIVER_OBJECT Kbd8042DriverObject = NULL; PDRIVER_OBJECT UsingDriverObject = NULL; PDEVICE_OBJECT UsingDeviceObject = NULL;
PVOID UsingDeviceExt = NULL;
//这里的代码用来打开USB键盘端口驱动的驱动对象 RtlInitUnicodeString(&uniNtNameString, L"\\Driver\\mouhid"); status = ObReferenceObjectByName(&uniNtNameString, OBJ_CASE_INSENSITIVE, NULL, 0, *IoDeviceObjectType, KernelMode, NULL, (PVOID *)&KbdhidDriverObject); if (!NT_SUCCESS(status)) { DbgPrint(("Couldn't get the USB Mouse Object\n")); } else { ObDereferenceObject(KbdhidDriverObject); DbgPrint(("get the USB Mouse Object\n")); } //打开PS/2键盘的驱动对象 RtlInitUnicodeString(&uniNtNameString, L"\\Driver\\i8042prt"); status = ObReferenceObjectByName(&uniNtNameString, OBJ_CASE_INSENSITIVE, NULL, 0, *IoDeviceObjectType, KernelMode, NULL, (PVOID *)&Kbd8042DriverObject); if (!NT_SUCCESS(status)) { DbgPrint(("Couldn't get the PS/2 Mouse Object \n")); } else { ObDereferenceObject(Kbd8042DriverObject); DbgPrint(("get the PS/2 Mouse Object\n")); } //如果两个设备都没有找到 if (!Kbd8042DriverObject && !KbdhidDriverObject) { return STATUS_SUCCESS; } //如果USB键盘和PS/2键盘同时存在,使用USB鼠标 if (KbdhidDriverObject) { UsingDriverObject = KbdhidDriverObject; } else { UsingDriverObject = Kbd8042DriverObject; } RtlInitUnicodeString(&uniNtNameString, L"\\Driver\\mouclass"); status = ObReferenceObjectByName(&uniNtNameString, OBJ_CASE_INSENSITIVE, NULL, 0, *IoDeviceObjectType, KernelMode, NULL, (PVOID *)&KbdDriverObject); if (!NT_SUCCESS(status)) { //如果没有成功,直接返回即可 DbgPrint(("MyAttach: Coundn't get the Mouse driver Object\n")); return STATUS_UNSUCCESSFUL; } else { ObDereferenceObject(KbdDriverObject); } //遍历KbdDriverObject下的设备对象 UsingDeviceObject = UsingDriverObject->DeviceObject; while (UsingDeviceObject) { status = SearchServiceFromMouExt(KbdDriverObject, UsingDeviceObject); if (status == STATUS_SUCCESS) { break; } UsingDeviceObject = UsingDeviceObject->NextDevice; } if (g_KoMCallBack.MouDeviceObject && g_KoMCallBack.MouseClassServiceCallback) { DbgPrint(("Find MouseClassServiceCallback\n")); } return status; }
|
能力值:
( LV4,RANK:50 )
|
-
-
80 楼
好吧,终于找到地方了,不知道以前从哪个地方抄的代码:
extern POBJECT_TYPE *IoDeviceObjectType;
应该是
extern POBJECT_TYPE *IoDriverObjectType;
多谢楼主的代码和开源精神,赞一个
|
能力值:
( LV2,RANK:10 )
|
-
-
81 楼
WIN7 64可以用不?
|
能力值:
( LV2,RANK:10 )
|
-
-
82 楼
我用这个驱动已成功向WinKawaks游戏模拟器发送模拟按键,但遇到这样一个问题:比如当按住了键盘A键时,这时我发送一个连招的模拟按键,但模拟器会一直响应我按住的A键,导致我的连招没效果,但当没有操作键盘的时候,这里发送模拟按键能100%成功。我也试过先模拟发送A键的抬起,但是抬起后还是继续响应按住的A键。请问有什么方法可以实现先交出键盘的控制权,等我的模拟按键结束后再响应回实际的键盘按键?最好可以给出代码哈,本人较菜。
|
能力值:
( LV2,RANK:10 )
|
-
-
83 楼
绝对的用得到,留个位置以后好来下
|
能力值:
( LV4,RANK:50 )
|
-
-
84 楼
一键连招的辅助我也做过。其实没什么复杂的,你按下按键,然后弹起,中间加一个比较短的延时
然后再按下另外一个键再弹起。这样就有效果了。至于延时多少具体自己试。
|
能力值:
( LV2,RANK:10 )
|
-
-
85 楼
长知识了
|
能力值:
( LV9,RANK:270 )
|
-
-
86 楼
好多人跟我一样啊,一看到键鼠模拟就想到用于游戏啊。。。
可以改成网络版,这样可以远程控制电脑里的键鼠了,比如用手机远程控制电脑
|
能力值:
( LV2,RANK:10 )
|
-
-
87 楼
感谢楼主分享
|
能力值:
( LV3,RANK:20 )
|
-
-
88 楼
赞,辛苦哦了
|
能力值:
( LV2,RANK:10 )
|
-
-
89 楼
mark
|
能力值:
( LV2,RANK:10 )
|
-
-
90 楼
尝试用C#调用
[DllImport(“kernel32.dll”)] public static extern IntPtr LoadLibrary(string dllToLoad);
IntPtr pDll = NativeMethods.LoadLibrary(@”PathToYourDll.DLL”); 返回值为IntPtr.Zero 原来是64位build的问题,改成32位build就好了
|
能力值:
( LV2,RANK:10 )
|
-
-
91 楼
发现一个问题 win7 64位
C# 调用dll MouseMoveRELATIVE 只能移动X轴
|
能力值:
( LV4,RANK:50 )
|
-
-
92 楼
楼上的小哥,请使用MouseMoveABSOLUTE,这个是绝对坐标移动,你用的那个是相对坐标移动。
|
能力值:
( LV4,RANK:50 )
|
-
-
93 楼
有没有哪位兄台能越过64位系统驱动签名的?分享一下吧。
|
能力值:
( LV4,RANK:50 )
|
-
-
94 楼
今天试着把该程序放到VS2015+WDK10下编译,发现只有32位的可以编译成功,X64的出现一堆的错误。有没有人会修改?
|
能力值:
( LV4,RANK:50 )
|
-
-
95 楼
win10下64位编译的问题解决了,但是还是要在开机选禁用驱动签名。头疼。。
|
能力值:
( LV2,RANK:10 )
|
-
-
96 楼
楼主,你有没有遇到模拟鼠标驱动导致蓝屏的啊
|
能力值:
( LV4,RANK:50 )
|
-
-
97 楼
Mco令海
楼主,你有没有遇到模拟鼠标驱动导致蓝屏的啊[em_2]
有的,要么是64位和32位的驱动没选对,要么就是win7和win10的驱动没选对,我就碰到这两种。
|
能力值:
( LV2,RANK:10 )
|
-
-
98 楼
mark,留个记号,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
99 楼
测试了下,可用
|
能力值:
( LV2,RANK:10 )
|
-
-
100 楼
楼主大大,有个死狗拿着驱动卖钱
|
|
|