Tôi đang tìm kiếm một cách đáng tin cậy phát hiện khi tôi khởi động vào WinPE 4 (powershell) (hoặc WinPE 3 (vbs) như một sự thay thế), Tôi đã khởi động từ một UEFI hoặc hệ thống BIOS? (mà không cần chạy một bên thứ ba exe như tôi đang ở trong một môi trường bị hạn chế)Làm cách nào để phát hiện xem WinPE (4) đã khởi động từ UEFI hay BIOS?
Điều này thay đổi đáng kể cách tôi sẽ phân vùng triển khai cửa sổ như bố cục phân vùng thay đổi và định dạng. (GPT vs MBR, vv)
tôi có một công việc đó là một sự thích nghi của this C++ mã trong PowerShell v3 nhưng nó cảm thấy khá hack-ish:
## 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()
}
này có vẻ khá trên đầu chỉ để có được một lá cờ đơn giản.
Có ai biết nếu có cách nào tốt hơn để thực hiện việc này không?
nó không phải là có hay không tôi đang ở WinPE để bắt đầu với. Đó là khi tôi đang ở trong PE, tôi đã được khởi động bởi UEFI hoặc Legacy BIOS. – RogerWilco