Получение инфы о оборудовании (не WMI)

Тема в разделе "WASM.WIN32", создана пользователем sasha_s, 25 май 2009.

  1. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    А поподробней можно?

    На счет МАСа все что нашел так это или WMI, или получение через NetBIOS (http://support.microsoft.com/kb/118623), но карточка ведь могет быть и не привязана к NetBIOS.

    Это не наши методы... :)

    А вот это особенно интересует, поподробней можно?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    А что именно интересует? Конкретизируй вопросы. В досе вызываешьпрерывание int 1Ah подробнее расписанно в вики.
    В виндоусе надо искать сходу не отвечу. Или драйвер можно написать и вызывать через сервис _32_. А если не волнует IRQ Routing, то можно взять готовый драйвер и считать нужную информацию через порты.

    Насчет ACPI то в интернете есть готовые исходники.
     
  3. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    В частности получение вендора (производитель) и серийника, коли таковой есть. Более ничего.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Это через PCI надо узновать.

    Что касается материнки и биоса. Под виндовс легко переделаешь.

    Код (Text):
    1. procedure BIOSInfo;
    2. var ps:^String;
    3.     p:PChar;
    4.     s:String;
    5.  
    6.     ID:Word;
    7. IsAward:Boolean;
    8. IsAMI:Boolean;
    9. begin
    10. WriteLn('=BIOS INFO=');
    11. ps:=Ptr($F000,$E060);
    12. if Pos('Award',ps^)<>0 then IsAward:=True
    13.  else IsAward:=False;
    14. if IsAward then
    15.  begin
    16.  WriteLn(ps^);
    17.  pS:=Ptr($F000,$EC70);
    18.  WriteLn('BIOS ID: ',pS^);
    19.  p:=Ptr($F000,$ECE0);
    20.  WriteLn('BIOS Number: ',p);
    21.  ps:=Ptr($F000,$ECE9);
    22.  end;
    23.  
    24. ps:=Ptr($F000,$F400);
    25. if Pos('AMIBIOS',ps^)<>0 then IsAMI:=True
    26.  else IsAMI:=False;
    27. if IsAMI then
    28.  begin
    29.  WriteLn(ps^);
    30.  pS:=Ptr($F000,$F478);
    31.  WriteLn('BIOS ID: ',pS^);
    32.  end;
    33. if (IsAMI=False) and (IsAward=False) then
    34.  WriteLn('Not Award Bios, and Not AMI Bios');
    35. ReadLn;
    36. end;
     
  5. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    SMBIOS.

    Так вот.
    Выцепить можно оттуда и марку материнки и ее серийник (если он там есть), но! Не на всех компах я нахожу SMBIOS инфу. В SMBIOS спецификации написано (http://www.dmtf.org/standards/smbios/):

    On non-EFI systems, the SMBIOS Entry Point structure, described below, can be located by application software by
    searching for the anchor-string on paragraph (16-byte) boundaries within the physical memory address range
    000F0000h to 000FFFFFh. This entry point encapsulates an intermediate anchor string that is used by some
    existing DMI browsers.
    On EFI-based systems, the SMBIOS Entry Point structure can be located by looking in the EFI Configuration Table
    for the SMBIOS GUID (SMBIOS_TABLE_GUID) and using the associated pointer. See section 4.6 of the EFI
    Specification for details. See section 4.6 of the EFI Specification for details. See section 2.3 and table 5-6 of the EFI
    Specification for how to report the underlying memory type.

    Мне сие необходимо только под виндой. Я так понимаю что все винды это non-EFI systems?
    Так вот есть один комп на котром Винда, но в указанном диапазоне не находиться anchor-string.

    Что могет быть?
     
  6. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    sasha_s
    А про страничную адресацию забыл?
     
  7. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Я читаю кусок физической памяти 000F0000h to 000FFFFFh в свой выделенный буфер. А в нем уже ищу. Так что я должен поменять?
     
  8. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    sasha_s
    Типа твоей темы мусолят, но с победным концом:
    http://www.rsdn.ru/forum/winapi/2359162.flat.2.aspx
     
  9. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Это не совсем то.
    Мне необходимо без WMI! Это главное требование.
    Да и там в конце идет исходник с вызовом двух апишек под Висту и выше. Тоже не годиццо. У меня тут на той машине, где не могу отыскать SMBIOS, WinXP стоит. Причем через WMI там SMBIOS получается, а вот обычным поиском -- нет!
     
  10. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Бредовая мысль, но может поможет - использовать дос режим.
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Нет. Это относиться к материнки или если можно так сказать к BIOS. Но таких материнок которые держат EFI раз-два да обчелся.
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    А выложи дамп первого мегабайта. 00000-FFFFFh
     
  13. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Чем и как поможет?
     
  14. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Мне-то не трудно, но форум (модератор) позволит прилепить сюда файлец 1 Мб?
    Может лучче скажи что там надо ключевого посмотреть, а я уже тут на месте гляну и тебе сообщу...
     
  15. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    sasha_s
    Тем, что творение дяди Билли "любезно" спроецирует тебе BIOS на доступную для чтения область памяти.
    Как обмениваться данными - думай сам.
     
  16. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Дык я и так читаю физикал мемору и под Вин. Или что?
     
  17. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    MirrorBlack
    Дык извиняюсь не вкурил что успешно читаеш.
     
  18. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Так надо проверить на наличие SMBios и DMI. Начать с определения чей BIOS. Проверить наличия EBDA.

    Возможен случий такой что SMBios нет, а используется DMI. Причем DMI может храниться в памятти или нехранится в памяти, а есть доступ через PnP. Тогда тут через реальный режим надо будет получать.
     
  19. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    EBDA -- подробнее плиз, а то гугел выдает разное:
    Earnings Before Depreciation and Amortization
    East Bay Dischargers Authority
    Everyone's Ballroom Dance Association
    Ellensburg Business Development Authority

    Но через WMI SMBios можно получить. А через DMI (без SMBios) разве можно получить вендора&сериал у БИОСа и материнки?

    И искать их (SMBios & DMI) по тэгам?
    Для SMBios -- это "_SM_"?
    Для DMI -- это "_DMI_"?
     
  20. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    sasha_s
    мне вот гугл выдал что EBDA - это Extended BIOS Data Area
    http://heim.ifi.uio.no/~stanisls/helppc/ebda.html