Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.94.152] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Как определить (в винде, через WinAPI, может, или ещё как-то) – используется ли UEFI или Lagacy BIOS ? |
Сообщ.
#2
,
|
|
|
https://docs.microsoft.com/ru-ru/windows/de...onmentvariablea
Думаю через эту функцию. |
Сообщ.
#3
,
|
|
|
Отлично, спасибо!
{$APPTYPE CONSOLE} uses Windows; function GetFirmwareEnvironmentVariable(lpName, lpGuid: PChar; pBuffer: Pointer; nSize: DWORD): DWORD; stdcall; external kernel32 name 'GetFirmwareEnvironmentVariableA'; var Error: DWORD; begin GetFirmwareEnvironmentVariable('', '{00000000-0000-0000-0000-000000000000}', nil, 0); Error := GetLastError; if Error = ERROR_INVALID_FUNCTION then WriteLn('Your system is based on Lagacy BIOS') else if Error = ERROR_NOACCESS then WriteLn('Your system is based on UEFI') else WriteLn('Strange GetLastError (', Error, ')'); ReadLn; end. Добавлено {$APPTYPE CONSOLE} uses Windows; function GetFirmwareEnvironmentVariable(lpName, lpGuid: PChar; pBuffer: Pointer; nSize: DWORD): DWORD; stdcall; external kernel32 name 'GetFirmwareEnvironmentVariableA'; function UEFIBasedSystem: Boolean; begin GetFirmwareEnvironmentVariable('', '{00000000-0000-0000-0000-000000000000}', nil, 0); Result := (GetLastError <> ERROR_INVALID_FUNCTION); // else ERROR_NOACCESS end; var Error: DWORD; begin if UEFIBasedSystem then WriteLn('Your system is based on UEFI') else WriteLn('Your system is based on Lagacy BIOS'); ReadLn; end. |
Сообщ.
#4
,
|
|
|
Ещё вариант:
{$APPTYPE CONSOLE} uses Windows; type TFirmwareType = (FirmwareTypeUnknown, FirmwareTypeBios, FirmwareTypeUefi, FirmwareTypeMax); TGetFirmwareTypeFunc = function(var FirmwareType: TFirmwareType): Boolean; stdcall; function FirwareType: TFirmwareType; var GetFirmwareType: TGetFirmwareTypeFunc; begin Result := FirmwareTypeUnknown; GetFirmwareType := GetProcAddress(GetModuleHandle(kernel32), 'GetFirmwareType'); // Windows 8 only if @GetFirmwareType <> nil then GetFirmwareType(Result); end; begin case FirwareType of FirmwareTypeUefi: WriteLn('Your system is based on UEFI'); FirmwareTypeBios: WriteLn('Your system is based on Lagacy BIOS') else WriteLn('Unknown firmware type'); // Можно убрать эту строку и заменить FirmwareTypeBios на else :) end; ReadLn; end. |