gpt4 book ai didi

c# - 如何检测 WinPE(4) 是否从 UEFI 或 BIOS 启动?

转载 作者:太空狗 更新时间:2023-10-29 19:47:59 26 4
gpt4 key购买 nike

我正在寻找一种方法来可靠地检测我何时启动到 WinPE 4 (powershell)(或 WinPE 3 (vbs) 作为替代),我是从 UEFI 还是 BIOS 系统启动的?(因为我在受限环境中而没有运行第三方 exe)

随着分区布局和格式的变化,这显着改变了我对 Windows 部署进行分区的方式。 (GPT 与 MBR 等)

我有一个改编自 this C++ 的作品powershell v3 中的代码,但感觉很乱:

## Check if we can get a dummy flag from the UEFI via the Kernel
## [Bool] check the result of the kernel's fetch of the dummy GUID from UEFI
## The only way I found to do it was using the C++ compiler in powershell
Function Compile-UEFIDectectionClass{
$win32UEFICode= @'
using System;
using System.Runtime.InteropServices;

public class UEFI
{
[DllImport("kernel32.dll")]
public static extern UInt32 GetFirmwareEnvironmentVariableA([MarshalAs(UnmanagedType.LPWStr)] string lpName, [MarshalAs(UnmanagedType.LPWStr)] string lpGuid, IntPtr pBuffer, UInt32 nSize);

public static UInt32 Detect()
{
return GetFirmwareEnvironmentVariableA("", "{00000000-0000-0000-0000-000000000000}", IntPtr.Zero, 0);
}
}
'@

Add-Type $win32UEFICode
}


## A Function added just to check if the assembly for
## UEFI is loaded as is the name of the class above in C++.
Function Check-IsUEFIClassLoaded{
return ([System.AppDomain]::CurrentDomain.GetAssemblies() | % { $_.GetTypes()} | ? {$_.FullName -eq "UEFI"}).Count
}

## Just incase someone was to call my code without running the Compiled code run first
If (!(Check-IsUEFIClassLoaded)){
Compile-UEFIDectectionClass
}

## The meat of the checking.
## Returns 0 or 1 ([BOOL] if UEFI or not)
Function Get-UEFI{
return [UEFI]::Detect()
}

为了获得一个简单的标志,这似乎有点过头了。

有谁知道是否有更好的方法来完成这项工作?

最佳答案

从某种意义上说,它仍然需要来自 powershell 的互操作,但如果您使用(或可以调用)互操作代码可能会更整洁:GetFirmwareType() .

这将返回一个 FIRMWARE_TYPE 枚举记录 here .鉴于这两个函数都在 Windows 8 中引入并由 kernel32.dll 导出,我无法相信 Microsoft 自己的文档将您指向“使用虚拟变量”!

在内部,GetFirmwareType 调用 NtQuerySystemInformation。我将深入研究它在做什么,但我认为它不一定具有启发性。

不幸的是,这只适用于 PE4 (Windows 8),因为这些功能是那时才添加的。

关于c# - 如何检测 WinPE(4) 是否从 UEFI 或 BIOS 启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16701293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com