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

Как получить дату BIOS

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

Как получить дату BIOS

Народная примета: если программист в девять утра уже на работе, значит, он еще на работе.


unit BiosDate;

interface

function GetBiosDate: string;

implementation

function SegOfsToLinear(Segment, Offset: Word): Integer;
begin
  result := (Segment shl 4) or Offset;
end;

function GetBiosDate: string;
begin
  result := string(PChar(Ptr(SegOfsToLinear($F000, $FFF5))));
end;

end.

Here's the translation of the text into Russian:

Единица Delphi, которая извлекает дату BIOS!

Функция GetBiosDate использует хитрый трюк для извлечения даты BIOS из памяти. Вот разбивка того, что она делает:

  1. Функция SegOfsToLinear конвертирует пару сегмента и смещения в линейный адрес. Это делается путем сдвига значения сегмента на 4 бита влево (чтобы align с 16-разрядным смещением) и ORing результата с смещением.
  2. Функция GetBiosDate использует конвертированный линейный адрес для создания указателя на память, расположенную по адресу $F000:$FFF5. В архитектуре x86 это общий адрес для структур данных BIOS.
  3. Функция PChar создает указатель на ANSI-строку из памяти.
  4. Конструктор строки конвертирует указатель в строку Delphi.

Результатирующая строка должна содержать дату BIOS в формате "MM/DD/YY" или аналогичном, в зависимости от реализации BIOS.

Обратите внимание, что это код предполагает, что структура данных BIOS хранится по адресу $F000:$FFF5 и что дата представлена в виде строки. Это может не быть истиной для всех реализаций BIOS, поэтому вам нужно тщательно тестировать этот код перед использованием его в производстве.

Также помните, что это код платформозависимый и работает только на архитектуре x86.

Вот альтернативное решение, использующее встроенную функцию Delphi GetSystemInfo для извлечения даты BIOS:

function GetBiosDate: string;
var
  Info: TSystemInformation;
begin
  GetSystemInfo(Info);
  Result := Info.BIOSDate;
end;

Эта APPROACH более платформонезависима и не требует прямого управления памятью. Однако она может не работать на всех системах, поддерживающих Delphi, поскольку дата BIOS может быть недоступной или представлена differently.

Данная статья описывает способ получения даты BIOS с помощью программирования в Pascal, использованием функции SegOfsToLinear для преобразования адреса из.segmented в линейный и вызова функции GetBiosDate для чтения даты из BIOS.


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:56:57/0.0054099559783936/1