5

我正在编写一个安全应用程序,它验证用户机器上的许多安全规则和策略。我需要实现一个测试方法,在启用Windows 8 的安全启动功能时返回 true ,或者在禁用时返回 false。

我搜索了信息,发现这是 BIOS 功能。所以我的问题是:是否可以使用 C# 代码获取 Windows 8 安全启动的状态?如果是,如何?

从 BIOS 安全启动


更新:请参阅@magicandre1981 的答案,重要的是要提到状态注册表项仅在支持安全启动功能时才存在。如果您在您的机器上没有找到此密钥,则您的机器可能不支持安全启动。

检查安全启动状态/支持转到运行 - > msinfo32.exe 并搜索“安全启动状态”

4

2 回答 2

9

MSinfo32.exeUEFISecureBootEnabled从注册表中读取值HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecureBoot\State

在此处输入图像描述

在我的系统SecureBoot上被禁用,返回值为 0。所以我假设 1 表示启用。

于 2013-08-16T07:50:00.303 回答
2

当然也适用于 Windows 10 的良好代码,并且应该处理大多数情况,包括遗留或丢失的密钥和异常,以及未来。打印到控制台同时还返回标志以供批处理或脚本使用:

using System;
using Microsoft.Win32;

namespace CheckSecureBoot
{
    class Program
    {
        static int Main()
        {
            int rc = 0;
            string key = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecureBoot\State";
            string subkey = @"UEFISecureBootEnabled";
            try
            {
                object value = Registry.GetValue(key, subkey, rc);
                if (value != null)
                    rc = (int)value;
            }
            catch { }
            Console.WriteLine($@"{subkey} is {(rc >= 1 ? "On" : "Off")} ({rc.ToString()})");
            return rc;
        }
    }
}
于 2019-08-14T07:33:12.040 回答