在开发和测试期间安装未签名驱动程序

默认情况下,仅当内核可以验证驱动程序签名时,64 位版本的 Windows Vista 和更高版本的 Windows 才会加载内核模式驱动程序。 但是,在早期驱动程序开发和非自动化测试期间,可以禁用此默认行为。 开发人员可以使用以下机制之一暂时禁用有效驱动程序签名的加载时强制实施。 但是,若要完全自动测试由 即插即用 (PnP) 安装的驱动程序,必须对驱动程序的目录文件进行签名。 需要对驱动程序进行签名,因为 Windows Vista 和更高版本的 Windows 为未签名的驱动程序显示驱动程序签名对话框,该对话框要求系统管理员授权安装驱动程序,这可能会阻止任何没有必要权限的用户安装驱动程序并使用设备。 无法在 Windows Vista 和更高版本的 Windows 上禁用此 PnP 驱动程序安装行为。

使用 F8 高级启动选项

Windows Vista 和更高版本的 Windows 支持 F8 高级启动选项(“禁用驱动程序签名强制”),该选项仅在当前系统会话中禁用内核模式驱动程序的加载时签名强制。 此设置不会在系统重启后保留。

附加内核调试器以禁用签名验证

将活动内核调试器附加到开发或测试计算机会禁用内核模式驱动程序的加载时签名强制实施。 若要使用此调试配置,请将调试计算机附加到开发或测试计算机,并通过运行以下命令在开发或测试计算机上启用内核调试:

bcdedit -debug on

若要使用 BCDEdit,用户必须是系统上管理员组的成员,并从提升的命令提示符运行命令。 若要打开提升的命令提示符窗口,请创建桌面快捷方式以 Cmd.exe,选择并按住 (或右键单击) 快捷方式,然后选择“ 以管理员身份运行”。

在内核调试模式下强制实施 Kernel-Mode 签名验证

但是,在某些情况下,开发人员可能需要附加内核调试器,但还需要维护加载时签名强制实施。 例如,当驱动程序堆栈具有未签名的驱动程序 ((如无法加载的筛选器驱动程序) )时,可能会使整个堆栈失效。 由于附加调试器允许加载未签名的驱动程序,因此一旦附加调试器,问题似乎就消失了。 调试此类问题可能很困难。

为了便于调试此类问题, 内核模式代码签名策略 支持以下注册表值:

HKLM\SYSTEM\CurrentControlSet\Control\CI\DebugFlags

此注册表值的类型为 REG_DWORD,可以根据以下一个或多个标志的按位 OR 分配值:

0x00000001
此标志值将内核配置为在驱动程序未签名时中断调试器。 然后,开发人员或测试人员可以通过在调试器提示符处输入 g 来选择加载未签名的驱动程序。

0x00000010
此标志值将内核配置为忽略调试器的存在,并始终阻止加载未签名的驱动程序。

如果注册表中不存在此注册表值或具有不基于前面所述的标志的值,则无论驱动程序是否已签名,内核始终在内核调试模式下加载驱动程序。

注意 默认情况下,注册表中不存在此注册表值。 必须创建 值才能调试内核模式签名验证。