win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决

您所在的位置:网站首页 win7未签名的程序怎么运行 win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决

win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决

#win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决| 来源: 网络整理| 查看: 265

win7关闭驱动签名,进入驱动测试模式 win7、win10关闭驱动签名、进入驱动测试模式方式一:批处理文件实现:管理员权限打开win7-win10驱动测试模式方式二:运行gpedit.msc方式三:在虚拟机打开DOS控制台输入命令 DebugView工具运行提示"Dbgv.sys: 拒绝访问"驱动项目配置属性常用设置驱动中KdPrint打印UNICODE_STRING字符串常用方法没使用的变量在编译时报警告:未引用的形参warning C4201: 使用了非标准扩展 : 无名称的结构/联合warning C4047: “=”:“HANDLE”与“UINT32”的间接级别不同warning C4242: “函数”: 从“UINT_PTR”转换到“UINT32”,可能丢失数据printf输出64位整数错误:无法启动此程序,因为计算机中丢失mfc140ud.dll。虚拟机蓝屏后的dump文件生成设置虚拟机优化提速虚拟机花屏问题错误:无法打开虚拟机\Virtual Machines\某目录\某文件名.vmx错误 MSB8040缓解Spectre 漏洞的库以及输出SXS.DLL的垃圾信息驱动开发配置项目属性windbg双机调试一、虚拟机设置一、windbg双机调试设置

win7、win10关闭驱动签名、进入驱动测试模式

以下3种方式,一步一步来,方式一操作一遍后还不行,就继续操作方式二,还不行的话继续方式三。

方式一:批处理文件实现:管理员权限打开win7-win10驱动测试模式 REM 复制Boot菜单 bcdedit /copy {current} /d "win7 x64 debug for windbg" pause REM 打开测试模式 bcdedit /set nointegritychecks on #禁用掉驱动签名检测 bcdedit /set testsigning on #打开测试模式 pause shutdown -r -t 1000

以上这段命令可以保存到一个.bat或.cmd格式文件里方便执行; 然后win+R打开运行,输入msconfig,引导,选择新增的"win7 x64 debug for windbg",点击高级选项,勾选调试,打开调试模式,为windbg双机调试做好设置。 最后,别忘了驱动程序项目的配置属性,Driver Signing里的Sign Mode改为Test Sign。

方式二:运行gpedit.msc

(1)管理员权限运行cmd,输入bcdedit /set testsigning on和bcdedit /Debug on,开启测试模式和调试模式。 输入bcdedit /dbgsettings查看设置情况。 (2)驱动程序项目的配置属性,Driver Signing里的Sign Mode改为Test Sign。 (3)运行,gpedit.msc,用户配置,管理模板,系统,驱动程序安装,鼠标右击"设备驱动程序的代码签名"图标,选择"编辑"项,勾选"已启用"单选框,选择"选项→忽略"项。

方式三:在虚拟机打开DOS控制台输入命令

先把虚拟机中的操作系统切换到测试模式,具体步骤如下:   ① 在虚拟机中以管理员身份通过【win+R】 --> 【cmd】 打开DOS控制台。   ② 输入命令【bcdedit /set testsigning on】 开启系统测试模式。   ③ 输入命令【bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS】,关闭系统的强制校验驱动签名功能,这样就可以安装运行没有数字签名的64位驱动了。   ④ 重启系统使得②③设置生效。若设置成功,重启后在桌面右下角会出现当前系统为测试模式的水印;某些系统会屏蔽这个水印,此时可以通过命令【bcdedit /enum】确认testsigning的值是否为Yes以判断系统当前是否处于测试模式。

参考: http://www.ujiaoshou.com/xtjc/094420355.html

https://ask.zol.com.cn/x/8598130.html

DebugView工具运行提示"Dbgv.sys: 拒绝访问"

问题:虚拟机中观察调试信息的DebugView工具,如果运行提示“C:\Windows\system32\Drivers\Dbgv.sys: 拒绝访问”。

在这里插入图片描述 这是由于操作系统目录权限的问题,因为DebugView这个程序它对系统目录没有写入的权限,所以它在第一次运行解压Dbg.sys的时候解压不进去; 以管理员的身份来运行也不行。

解决方法: 将DebugView这个exe复制到"C:\Windows\system32\Drivers"这个系统目录下,并发送一个该exe应用程序的快捷方式到桌面上运行就行了,这个时候它就能够运行起来,捕捉到我们的内核信息了。

在这里插入图片描述

驱动项目配置属性常用设置 调整属性 - C/C++ - 常规,警告等级 4,将警告视为错误 否;链接器 - 常规,警告视为错误 否;Driver Settings - General,Target OS Version改成Windows 7,Target Platform改为Desktop;Target Platform一般设置为Desktop,而_NT_TARGET_VERSION要设置为跟Target OS Version一致的操作系统版本;Stampinf里所有 是 的地方改成 否;Inf2Cat里所有 是 的地方改成 否;Driver Signing - General中的Sign Mode改为 Test Sign。

在这里插入图片描述

如果平时不使用windbg双机调试的话,虚拟机开机后在启动菜单那里选择普通启动即可(只要打开了测试模式),不需要进入调试模式就可以加载我们编写的驱动。

参考: http://www.manongjc.com/detail/56-jhctcpdeofdpczh.html

驱动中KdPrint打印UNICODE_STRING字符串常用方法 KdPrint(("zp:RegistryPath=%wZ\n", RegistryPath)); KdPrint(("zp:RegistryPath=%ws\n", RegistryPath->Buffer)); KdPrint(("zp:RegistryPath=%s\n", RegistryPath->Buffer)); //输出不了,%s是输出多字节的,内核中都是宽字符 KdPrint(("zp:RegistryPath=%S\n", RegistryPath->Buffer));

在这里插入图片描述

没使用的变量在编译时报警告:未引用的形参

例如:警告 C4100 “RegistryPath”: 未引用的形参 MyDriver001 C:\Users\Administrator\source\repos\MyDriver001\Driver.c。 解决方法: 给每个未使用的形参使用宏UNREFERENCED_PARAMETER。

UNREFERENCED_PARAMETER(RegistryPath);

或者使用一下即可(占位):

RegistryPath; warning C4201: 使用了非标准扩展 : 无名称的结构/联合

你可以在引起警告的代码段前后如下所示设置编译器警告状态:

#pragma warning(push) #pragma warning(disable: 4201) //#pragma warning(disable: 4201 4200) // Some code // Some code // Some code #pragma warning(pop) //#pragma warning (default)

参考: https://www.thinbug.com/q/1723572 https://www.coder.work/article/1563334

warning C4047: “=”:“HANDLE”与“UINT32”的间接级别不同

如果我们项目属性的警告等级为最高级4,将警告是为错误的话,那么有些隐式转换会导致warning C4047,即不能将UINT32类型的值分配到HANDLE类型的实体,导致编译错误。 解决办法:通过(PVOID)(size_t)强制转换类型,size_t是关键。

warning C4242: “函数”: 从“UINT_PTR”转换到“UINT32”,可能丢失数据

如果我们项目属性的警告等级为最高级4,将警告是为错误的话,那么有些隐式转换会导致warning C4042,导致编译错误。 解决办法:通过(UINT32)(size_t)强制转换类型,size_t是关键。

printf输出64位整数

在windows下,printf、sprintf_s之类的格式化输出函数,打印输出64位数据时,使用的格式化字符串为:

printf("%I64d/n",a); printf("%I64u/n",a);

代码如下:

DWORD tmpData = 0; //存放读取的数据 char bufOutput[512] = {0}; sprintf_s(bufOutput, "R3 ZP:EXE 返回数据地址=0x%p 返回数据地址=0x%16X 返回数据地址=0x%llX R0写入R3的返回数据:%I64d R0写入R3的返回数据:%lld 返回数据长度=%d 实际返回长度=%d 行号=%d\n", &tmpData, &tmpData, &tmpData, tmpData, tmpData, sizeof(tmpData), dwRetSize, __LINE__); OutputDebugStringA(bufOutput); 错误:无法启动此程序,因为计算机中丢失mfc140ud.dll。

当我们编写的MFC程序要在虚拟机中运行的时候,报上述错误,这是由于虚拟机中没有安装vc2015、vc2017运行库(支持库),甚至某些开发库导致的错误。 解决方法: 不要用Debug编译,要用Release编译,并且要在项目属性配置中,设置成在静态库中使用MFC。

虚拟机蓝屏后的dump文件生成设置 鼠标右击我的电脑,属性,高级系统设置,会打开系统属性对话框,点击高级,点击启动和故障恢复这个组框里的设置:

在这里插入图片描述 勾选将事件写入系统日志,写入调试信息这个组框里我们一般选择核心内存转储就可以了:

在这里插入图片描述

dump文件在虚拟机操作系统中的: C:\Windows\ 当然,你也可以创建一个dump目录,在写入调试信息组框里设置该目录。

设置虚拟内存分页文件的大小 如果设置完dump选项后,点击确定出现下图提示的话: 在这里插入图片描述 我们回调高级标签页中,点击性能组框中的设置:

在这里插入图片描述 打开性能选项对话框,点击高级,点击虚拟内存组框中的更改:

在这里插入图片描述 在这里插入图片描述 如上图所示,修改虚拟内存分页文件的自定义大小,给它调整大一些就可以了,然后点击设置、确定按钮,重新启动虚拟机。

虚拟机优化提速

原有的默认设置是CPU数量和每个处理的的内核数量都是1,这样由于占用的CPU资源比较低,会造成速度比较慢,所以要根据你本机实际CPU数量、核心数来设置虚拟机的CPU(可以打开任务管理器、性能,可以通过CPU使用记录组框得到CPU核心数),只要保证处理器内核总数没有警告就行; 虚拟机的内存设置为4096MB,也可以根据你本机实际内存来设置;

虚拟机花屏问题

重新安装vmtools,点击修改,把SVGA驱动程序给禁掉,然后一路确定,这个时候系统用的就是标准的VGA了,现在它虽然不会花屏,但是性能不好,我们可以在虚拟机中安装驱动大师或者驱动精灵,先做一个硬件检测,把显卡驱动升级一下,然后重新启动系统,调整分辨率即可。

错误:无法打开虚拟机\Virtual Machines\某目录\某文件名.vmx

当我们打开虚拟机时候,报上述错误,这是由于虚拟机中的系统可能由某些死机、无响应的错误导致的。 解决方法: 找到该虚拟机系统所在的目录:

在这里插入图片描述 在这里插入图片描述 将目录中的*.vmx~后缀名改为vmx,然后删除上图中的3个目录(尤其是*.vmx.lcx这个锁定文件)和第4个一长串数字字母组成的文件名这个临时文件。

错误 MSB8040缓解Spectre 漏洞的库以及输出SXS.DLL的垃圾信息

链接:https://blog.csdn.net/zhaopeng01zp/article/details/128222988

驱动开发配置项目属性 //VS2010+WDK7.1,编译32位和64位的驱动配置 //到微软官网下载WDK7.1,安装到默认的C盘根目录即可 //编译出32位驱动 VS2010里新建一个空项目,新建一个配置名:DriverWDK32 //自行定义名字 VS++目录-》可执行文件目录:C:\WinDDK\7600.16385.1\bin\x86;$(ExecutablePath) //其实这里都是32位的编译器,链接器,只是通过传参,调用X86或者AMD64的编译连接器,生成32位或者64位的驱动 常规-》目标文件扩展名:.sys C/C++-》常规-》附加包含目录:C:\WinDDK\7600.16385.1\inc\ddk;C:\WinDDK\7600.16385.1\inc;C:\WinDDK\7600.16385.1\inc\crt;C:\WinDDK\7600.16385.1\inc\api;%(AdditionalIncludeDirectories) C/C++-》常规-》调试信息格式:C7 兼容 (/Z7) C/C++-》优化-》优化:已禁用 (/Od) C/C++-》预处理器-》预处理器定义:WIN32=100;_X86_=1;WINVER=0x500;DBG=1;%(PreprocessorDefinitions) C/C++-》代码生成-》运行库:多线程调试 (/MTd) C/C++-》代码生成-》缓冲区安全检查:否 (/GS-) C/C++-》高级-》调用约定:__stdcall (/Gz) C/C++-》高级-》编译为:编译为 C++ 代码 (/TP) 链接器-》常规-》启用增量链接:否 (/INCREMENTAL:NO) 链接器-》常规-》附加库目录:C:\WinDDK\7600.16385.1\lib\win7\i386;%(AdditionalLibraryDirectories) 链接器-》输入-》附加依赖项:ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB;%(AdditionalDependencies) 链接器-》输入-》忽略所有默认库:是 (/NODEFAULTLIB) 链接器-》清单文件-》启用用户账户控制(UAC):否 (/MANIFESTUAC:NO) 链接器-》调试-》生成调试信息:是 (/DEBUG) 链接器-》调试-》生成映射文件名:是 (/MAP) 链接器-》系统-》子系统:控制台 (/SUBSYSTEM:CONSOLE) 链接器-》系统-》堆栈保留大小:4194304 链接器-》系统-》堆栈提交大小:4096 链接器-》系统-》驱动程序:驱动程序 (/Driver) 链接器-》高级-》入口点:DriverEntry 链接器-》高级-》设置校验和:是 (/RELEASE) 链接器-》高级-》基址:0x10000 链接器-》高级-》随机地址:空 链接器-》高级-》数据执行保护(EDP):空 链接器-》高级-》目标计算机:MachineX86 (/MACHINE:X86) //编译64位驱动,稍微改动下边的几个,其他跟上边相同即可: VS2010里新建一个空项目,新建一个配置名:DriverWDK64 //自行定义名字 链接器-》常规-》附加库目录:C:\WinDDK\7600.16385.1\lib\win7\amd64;$(LibraryPath) C/C++-》预处理器-》预处理器定义:WIN32=100;_AMD64_=1;WINVER=0x501;DBG=1;%(PreprocessorDefinitions) //这里用到的估计也就只有_AMD64_,DBG,因为剩下的都不是64位的定义,没用到也就能编译过去了 链接器-》高级-》目标计算机:MachineX64 (/MACHINE:X64) windbg双机调试 一、虚拟机设置 1、串行端口 如果有打印机,建议删除,这样虚拟机占用的是串行端口1,即com1; 2、使用命名的管道为\\.\pipe\com1 虚拟机这里填入的命名管道名称随便填,只是一个别名(代表串行端口),所以说可以为\\.\pipe\abc123,只要在下面windbg快捷方式中和这个abc123别名一致就可以了; 3、进入虚拟机系统桌面后,运行msconfig.exe,如下设置:

在这里插入图片描述 如果虚拟机设置中没有打印机,新增的就是串行端口1,那么这里就选择COM1即可; 如果虚拟机有打印机,新增的就是串行端口2,那么这里就要选择COM2了。

一、windbg双机调试设置

windbg双机调试 方式1: -b -k com:pipe,port=\.\pipe\abc123,resets=0,reconnect -y

"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe" -b -k com:pipe,port=\\.\pipe\abc123,resets=0,reconnect -y 设置符号,添加系统环境变量_NT_SYMBOL_PATH 的值为: srv*c:\symbols*http://msdl.microsoft.com/download/symbols 符号根据你所在目录进行设置,例如 srv\*dsymbols_xpsp3之类; 也可以不设置系统环境变量,直接在快捷方式里添加: -y SRV*D:\Symbols*http://msdl.microsoft.com/download/symbols 完整的快捷方式为: "C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x86\windbg.exe" -y SRV*D:\symbols_win732*http://msdl.microsoft.com/download/symbols -b -k com:port=\\.\pipe\com_4,baud=115200,pipe 或者: "C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64\windbg.exe" -y SRV*D:\XPSP3_Symbols*http://msdl.microsoft.com/download/symbols -b -k com:pipe,port=\\.\pipe\com_1,baud=115200,reconnect

windbg双机调试 方式2 不用快捷方式打开内核调试连接: ctrl+K Kernel Debug 打开Kernel Debugging 选COM选项卡 勾选pipe, 勾选Reconnect Resets置0 Baud Rate 115200 Port \.\pipe\com1

在这里插入图片描述 如果虚拟机中设置的命名端口别名是\.\pipe\abc123的话,这里windbg菜单Kernel Debugging(如上图所示)中的Port就要设置为\.\pipe\abc123才可以。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3