Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从32位应用程序调用64位驱动程序_C++_Windows_Driver_32bit 64bit - Fatal编程技术网

C++ 如何从32位应用程序调用64位驱动程序

C++ 如何从32位应用程序调用64位驱动程序,c++,windows,driver,32bit-64bit,C++,Windows,Driver,32bit 64bit,使用DebugView比我想象的要简单。几个小时后,结果发现64位内核驱动程序是罪魁祸首。。。愚蠢的我。。。哼 你将如何解决这个问题 因为我个人的内核签名证书过期了,第一次拿到证书很痛苦,他们甚至不再卖了 有人能为修改后的64位sys文件重新签名一次吗?我可以提供我以前签名的原始驱动程序,如果您需要它进行二进制比较等 status = ZwDuplicateObject(hProcess,(HANDLE)SysHandle[i].Handle,ZwCurrentProcess(),&Object

使用DebugView比我想象的要简单。几个小时后,结果发现64位内核驱动程序是罪魁祸首。。。愚蠢的我。。。哼

  • 你将如何解决这个问题

  • 因为我个人的内核签名证书过期了,第一次拿到证书很痛苦,他们甚至不再卖了

  • 有人能为修改后的64位sys文件重新签名一次吗?我可以提供我以前签名的原始驱动程序,如果您需要它进行二进制比较等

    status = ZwDuplicateObject(hProcess,(HANDLE)SysHandle[i].Handle,ZwCurrentProcess(),&ObjectHandle,0, 0, DUPLICATE_SAME_ATTRIBUTES |DUPLICATE_SAME_ACCESS); DbgPrint("status:%d sourceProcess:%p SourceHandle:%d CurrentProcess:%d returnedObjectHandle:%d.\n", RtlNtStatusToDosError(status),hProcess, (HANDLE)SysHandle[i].Handle,PsGetCurrentProcessId(),&ObjectHandle); //On_32bit status:0 sourceProcess:80002CB8 SourceHandle:68 CurrentProcess:3984 returnedObjectHandle:-340903132. //On_64bit status:0 sourceProcess:FFFFFFFF800001BC SourceHandle:108 CurrentProcess:1996 returnedObjectHandle:221378472. status = ObReferenceObjectByHandle(ObjectHandle, FILE_ANY_ACCESS, *IoFileObjectType, UserMode, (PVOID*)&FileObject, &objHandle); DbgPrint("status %d.\n", RtlNtStatusToDosError(status)); //On_64bit status=STATUS_INVALID_HANDLE (error 6 here only on 64 bit on 32 it is 0 as expected) !!!??? status=zwdupplicateObject(hProcess,(HANDLE)SysHandle[i]。HANDLE,ZwCurrentProcess(),&ObjectHandle,0,0,DUPLICATE_SAME_ATTRIBUTES | DUPLICATE_SAME_ACCESS); DbgPrint(“状态:%d sourceProcess:%p SourceHandle:%d CurrentProcess:%d returnedObjectHandle:%d.\n”,RtlNtStatusToDosError(状态),HPProcess,(HANDLE)SysHandle[i]。HANDLE,PsGetCurrentProcessId(),&ObjectHandle); //On_32位状态:0 sourceProcess:80002CB8 SourceHandle:68 CurrentProcess:3984 ReturnedObject Handle:-340903132。 //On_64位状态:0 sourceProcess:FFFFFFFF 800001BC SourceHandle:108 CurrentProcess:1996 ReturnedObject Handle:221378472。 status=ObReferenceObjectByHandle(ObjectHandle,FILE_ANY_ACCESS,*IoFileObjectType,UserMode,(PVOID*)&FileObject,&objHandle); DbgPrint(“状态%d.\n”,RtlNtStatusToDosError(状态)); //On_64bit status=status_INVALID_HANDLE(此处错误6仅在32位上的64位上,按预期为0)!!!???
    你能发布你的代码吗?你不能在64位版本的windows上运行32位驱动程序。请看最后一个问题:@NathanOliver该问题询问如何在32位应用程序中调用64位驱动程序。OP似乎有一个32位应用程序可以在32位windows上运行,但不能在64位windows上运行,因为驱动程序是64位的。否:否,createfile不会失败hdev返回一个32位地址,如0x00004724,并且err watch仅在调用DeviceIoControl后更改。64位驱动程序需要的是64位地址,而不是32位地址。这可能是原因。虽然在32位和64位驱动程序的32位应用程序端,也不确定如何实现该功能,但该函数的其他参数可能需要强制转换或扩展。不知道如何正确编码这就是我寻求帮助的原因。你确定问题是因为应用程序是32位的吗?当编译为64位时,相同的代码可以工作吗?(问题更可能是64位驱动程序中的错误。)从32位应用程序调用64位驱动程序不需要做任何特殊的操作。