Узнать данные с BIOS

Тема в разделе "LANGS.C", создана пользователем AlexSun, 10 июн 2011.

  1. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Задача средствами C узнать дату изготовления биоса, версию, тип компьютера и тому подобное.
    Знаю раньше в Turbo C была функция peekb() для чтения адреса и ею можно было все узнать в MS-DOS, а сейчас как?
    Пишу в C++Builder XE под Windows 7.
     
  2. Xml

    Xml New Member

    Публикаций:
    0
    Регистрация:
    18 май 2011
    Сообщения:
    54
    реестр
    setupapi
    wmi
     
  3. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Xml
    в реестре они редактируется теоретически
    только так?
     
  4. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    wmi если хотите читать непосредственно, то нужен драйвер, иначе никак
     
  5. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    h0t
    можно подробнее, какой драйвер и по каким адресам что искать?
     
  6. Xml

    Xml New Member

    Публикаций:
    0
    Регистрация:
    18 май 2011
    Сообщения:
    54
    что с того?
     
  7. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Xml
    ну мне нужно из памяти =)
     
  8. Xml

    Xml New Member

    Публикаций:
    0
    Регистрация:
    18 май 2011
    Сообщения:
    54
    а для чего это нужно? интересно просто кто это редактирует у себя дату изготовления биоса и тп
     
  9. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Xml
    предмет "Архитектура ПК", сказано прочитать из памяти
     
  10. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    И сказано делать это под виндами в пользовательском кольце?
     
  11. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Dmitry_Milk
    ну вообще там MS-DOS, с ним проблем нет, но мне для себя интересно как такое сделать под виндами
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    AlexSun
    Можно и из памяти. Используй '\Device\PhysicalMemory'
     
  13. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
  14. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Pavia
    Есть примеры кода? Как например прочитать адрес CA777?
    И где взять информацию про адреса, где что находиться?
    Погуглил немного, насчет даты создания BIOS, в разных материнских платах она находиться по разных адресах?
    _sheva740
    Ассемблерной вставкой? Это конечно решение, но я знаком только с ассемблером процессора i8080...
     
  15. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    Ядро из секции физиклмемори инфу и читает.
     
  16. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    klzlk
    мне, к сожалению, ваше сообщение ничего не сказало =)

    Код (Text):
    1. double CPUSpeed(void)
    2. {
    3.   DWORD dwTimerHi, dwTimerLo;
    4.   double dRes;
    5.   asm
    6.    {
    7.       DW 0x310F
    8.       mov dwTimerLo, EAX
    9.       mov dwTimerHi, EDX
    10.     }
    11.  
    12.   Sleep (500);
    13.   asm
    14.    {
    15.       DW 0x310F
    16.       sub EAX, dwTimerLo
    17.       sub EAX, dwTimerHi
    18.       mov dwTimerLo, EAX
    19.       mov dwTimerHi, EDX
    20.    }
    21.   dRes = dwTimerLo/(1000.0*500);
    22.   return dRes;
    23. }
    Вот нашел что-то такое для скорости процессора.
    Можно подобным способом вытянуть дату создания BIOS?
     
  17. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    AlexSun
    Если просто посмотреть ))),
    то Пуск -> Выполнить -> cmd -> debug.exe ...
    [​IMG]
    Не уверен, но думаю помочь может доступ к памяти из ring 0
    http://www.wasm.ru/article.php?article=drvw2k03
    Это кажется то о чем klzlk говорил.
     
  18. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    AlexSun
    Нет)
    DW 0x310F это инструкция RDTSC, количество тактов процессора, алгос его подсчитывает за фиксированное время 500 мс, так узнает скорость.
     
  19. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    AlexSun
    Сказанного про эту секцию достаточно, чтобы найти в сурсах ядра ссылки на имя секции и её использование:
    Проецирование для NTVDM: VdmpInitialize().
    Получение версии и даты BIOS("SystemBiosDate" etc.): CmpInitializeMachineDependentConfiguration() и ссылки на CmpMatchDateRule().

    В отличие от MmMapIoSpace(), секция доступна в юзермоде(выше XP хз).
     
  20. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    MmMapIoSpace из ядра