Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получение UUID BIOS через Windows API

Delphi , ОС и Железо , BIOS

UUID (Universal Unique Identifier) — это уникальный идентификатор, который используется для идентификации оборудования и программного обеспечения. В конфигурационных файлах VMware можно найти UUID BIOS в формате:

uuid.bios = "56 4d ed cf 3c cd 63 20-53 78 95 86 26 92 22 c8"

Почти каждое физическое устройство BIOS имеет подобный UUID. Вопрос, который часто задают, заключается в том, существует ли какой-либо вызов Windows API, который позволяет получить этот идентификатор?

Одним из возможных подходов является использование WMI-класса Win32_ComputerSystemProduct.UUID, но полученное значение отличается от значения uuid.bios. Также отличается значение ключа реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid.

Однако, существует альтернативный подход, который заключается в использовании WMI-класса Win32_BIOS и свойства SerialNumber. Пример кода на Object Pascal (Delphi) для получения UUID BIOS через этот класс приведен ниже:

uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;

procedure GetWin32_BIOSInfo;
const
  WbemUser = '';
  WbemPassword = '';
  WbemComputer = 'localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator: OLEVariant;
  FWMIService: OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject: OLEVariant;
  oEnum: IEnumvariant;
  iValue: LongWord;
begin
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet := FWMIService.ExecQuery('SELECT SerialNumber FROM Win32_BIOS', 'WQL', wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  if oEnum.Next(1, FWbemObject, iValue) = 0 then
    Writeln(Format('SerialNumber    %s', [String(FWbemObject.SerialNumber)])); // String
end;

begin
  try
    CoInitialize(nil);
    try
      GetWin32_BIOSInfo;
    finally
      CoUninitialize;
    end;
  except
    on E: EOleException do
      Writeln(Format('EOleException %s %x', [E.Message, E.ErrorCode]));
    on E: Exception do
      Writeln(E.Classname, ':', E.Message);
  end;
  Writeln('Press Enter to exit');
  Readln;
end.

Этот код возвращает значение свойства SerialNumber класса Win32_BIOS, которое совпадает с значением uuid.bios из файла конфигурации VMware, за исключением префикса VMware-. Например: VMware-56 4d af ac d8 bd 4d 2c-06 df ca af 89 71 44 93.

Если вам нужно получить значение UUID без префикса VMware-, то вам придется читать SMBIOS-таблицы напрямую. Для этого можно использовать статью "Чтение SMBIOS-таблиц с помощью Delphi", доступную по ссылке https://theroadtodelphi.wordpress.com/2011/08/02/reading-the-smbios-tables-using-delphi/.

Формат UUID описан в спецификации SMBIOS и RFC 4122. UUID consists of 128 bits, divided into several fields, as shown in the following table:

| Field Name | Bit Position | Length (bits) | | --- | --- | --- | | Time_low | 0 | 32 | | Time_mid | 32 | 16 | | Time_hi_and_version | 48 | 16 | | Clock_seq_and_node | 64 | 8 | | Clock_seq_hi_and_reserved | 72 | 4 | | Clock_seq_low | 76 | 3 | | Node | 80 | 48 |

Although RFC 4122 recommends network byte order for all fields, the PC industry, including the ACPI, UEFI, and Microsoft specifications, has consistently used little-endian byte encoding for the first three fields: time_low, time_mid, time_hi_and_version. The same encoding, also known as wire format, should also be used for the SMBIOS representation of the UUID.

В заключение, можно сказать, что для получения UUID BIOS через Windows API можно использовать WMI-класс Win32_BIOS и свойство SerialNumber. Если вам нужно получить значение UUID без префикса VMware-, то придется читать SMBIOS-таблицы напрямую.

Создано по материалам из источника по ссылке.

в одном предложении 'Описывается процесс получения уникального идентификатора UUID BIOS через Windows API, в том числе с использованием WMI-класса `Win32_BIOS` и свойства `SerialNumber`, а также чтения SMBIOS-таблиц на


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: BIOS ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-27 07:13:29/0.0056219100952148/0