我正在编写一个安全应用程序,用于验证用户计算机上的许多安全规则和策略。我需要实现一个测试方法,该方法在启用Windows 8's Secure Boot feature时返回true,或在禁用时返回false。
我搜索了信息,我看到这是一个BIOS功能。所以我的问题是:是否可以使用C#代码获取Windows 8安全启动的状态?如果是,怎么样?
更新: 请参阅@ magicandre1981的答案,重要的是要提到状态注册表项仅在支持安全引导功能时才存在。如果您在计算机上找不到此密钥,则可能是您的计算机不支持安全启动。
检查安全启动状态/支持转到运行 - > msinfo32.exe并搜索“安全启动状态”
答案 0 :(得分:8)
MSinfo32.exe
从UEFISecureBootEnabled
下的注册表中读取值HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecureBoot\State
。
在我的系统上SecureBoot
被禁用,返回值为0.所以我假设1表示已启用。
答案 1 :(得分:1)
当然,对于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;
}
}
}