На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Как проверить поддержку расширенного режима работы с int 13h из-под Windows?
    Славян ну вот.. значит фишка работает.. спасибо!
      А, ещё у меня (ибо DA, а не 9A):
      Bit14 ESCD support is available - 1 (Yes)

      Добавлено
      Да, работает. Непонятно, всё же, почему у Jin X не пашет. :'(
        а вообще, тут достаточно двух строк в консоли:
        wmic partition get type
        Сообщение отредактировано: core-i7 -
          Да, это я прогнал :facepalm:
          Короче, писал на Delphi 7 и на fasm.
          В Delphi забыл поставить stdcall в определении функций. А в fasm указывал строкой, но она почему-то не заносилась в стек вообще (при подключении win32ax.inc, а вот с win32a.inc всё работает).
          Конкретно этот бит пока не проверял, но думаю, всё сработает, спасибо за инфу ;)
            возвращает тип разделов, среди которых должен быть и 'Extended int-13'

            Добавлено
            Цитата
            но думаю, всё сработает, спасибо за инфу

            я - так вообще не проверял.. (у меня XP 32-бит)
            чисто в теории должно было работать
              Какие-то странноватые данные выходят. Я же правильно понял, что "BIOS Characteristics" находится по смещению 0Ah?
              У меня там 7F03F00002010000h (00 00 01 02 00 F0 03 7F), т.е. 19-й бит сброшен. Хотя EDD однозначно поддерживается.
              А по смещению 2 байт = 2 (а это как бы размер форматированных данных, включая заголовок). При этом первый байт (тип структуры) = 0 (т.е. должно быть всё ок).

              Добавлено
              Опа, а вот по смещению 8 начинается нормальный заголовок: тип 0, размер 18h и дальше по смещению 0Ah (относительно 8-го байта) идёт число 13F8B9880h (80 98 8B 3F 01 00 00 00), 19-й бит стоит! Ура!
              Осталось теперь разобраться, почему у меня первые 8 байт – какая-то лажа...

              Добавлено
              Первые 8 байт: 00 02 07 00 2B 0C 00 00, а дальше уже 00 18 00 00 01 02 00 F0
              Если это всё массив структур, то почему второй байт (размер) = 2 ?
              Если размер этого блока = 2 байтам, то далее идёт тип 7 и размер 0, но как размер может быть 0 ???
              И как вообще понять, где нужный мне блок начинается (может, по сегменту F000)? Жесть какая-то... :wacko:

              Добавлено
              Цитата core-i7 @
              в шапке там должно быть типа такого (по крайней мере у меня)
              В какой шапке?
              А вообще, эта таблица (в таком виде) из какой программы сграблена?

              Добавлено
              На всякий случай инфа из RBIL:
              ExpandedWrap disabled
                Format of SMBIOS data structure:
                Offset  Size    Description     (Table F0059)
                 00h  4 BYTEs   structure header
                                BYTE structure type (see #F0060)
                                        80h-FFh available for system/OEM-specific data
                                BYTE length of formatted data, including header
                                WORD structure handle (a unique value 0000h-FEFFh [v2.0 allows
                                          up to FFFEh])
                                        handles FF00h-FFFFh are reserved for use by the SMBIOS
                                          specification
                                        handles need not be contiguous -- a handle might not
                                          exist any more after a configuration change, but the
                                          BIOS may not re-assign that handle number to another
                                          structure
                ---type 00h---
                 04h    BYTE    string number of the vendor name (string numbers are 1-based)
                 05h    BYTE    string number of the version string (00h if not present)
                 06h    WORD    starting segment of runtime BIOS
                 08h    BYTE    string number of BIOS release date
                 09h    BYTE    size of BIOS ROM (stored as one less than number of 64K units)
                 0Ah    QWORD   BIOS characteristics (see #F0061)
                 12h    var     optional space for BIOS characteristics extension
                                  (see #F0062,#F0063)
                                (size of optional space is implied by header's length field)
                 var    var     free-form ASCIZ strings (max 64 bytes per string)


              Добавлено
              Хотя, некоторая картинка вырисовывается, но как-то очень странно это.

              (тут первые 2 цифра – смещение от начала)
              00: тип = 0 (инфа о биосе(?))
              01: размер = 2 (тут этот блок и закончился)
              Далее пошли ASCIIZ-строки (в конце двойной ноль):
              02: 07 00
              04: 2B 0C 00 00

              Новый блок:
              08: тип = 0 (снова инфа о биосе)
              09: размер = 18h (24)
              0A: данные (22 оставшихся байта)
              20: пошли строки

              Новый блок (тут строки закончились):
              48: тип = 1 (системная инфа)
              49: размер = 1Bh (27 байт)
              4A: данные (25 оставшихся байт)
              63: начались строки (пока всё чётко)

              Новый блок:
              F5: тип = 2 (материнка)
              F6: размер = 0Fh (15)
              F7: данные (13 оставшихся байт)
              104: начались строки...
              и т.д.

              Вроде как всё сходится.
              Смущает только первый блок – нафига он? Почему у меня 2 блока инфы о биосе?
                Jin X, мои логи из программы rw: http://rweverything.com/download/
                я не вижу, что возвращает эта функция, ..но вы можете сравнить выхлоп функции "GetSystemFirmwareTable" с данными этой проги. По сути, там сперва должен идти заголовок (см.мой лог), а потом - сами структуры. В заголовке указывается кол-во структур в таблице.

                RBIL (как я понял) это хелп Ральфа Брауна что-ли?
                Лучше покурить SMBIOS/DMI спецификацию:
                https://www.dmtf.org/sites/default/files/st...P0134_3.2.0.pdf
                Сообщение отредактировано: core-i7 -
                  на всякий.. приведу расклад DMI-таблицы
                  по моим расчётам, GetSystemFirmwareTable должна была сбросить в буфер всю таблицу, включая заголовок, иначе разобраться в куче данных будет проблематично (нет описания таблицы). То-есть данные в буфере должны начинаться с сигнатуры _SM_. Ну и где-то должна валяться база таблицы [SMBIOS-Entry], чтобы дальше плясать от неё. Например вот лог, где указана линейная база 0x000FAFF0 (FAFF:0000) - дзебуг подтверждает Entry-Point:
                  ExpandedWrap disabled
                    [SMBIOS Entry]  0x000FAFF0
                    5F 53 4D 5F C3 1F 02 04 BA 00 00 00 00 00 00 00   _SM_............
                    5F 44 4D 49 5F C4 65 04 40 D6 0F 00 16 00 00      _DMI_.e.@......
                     
                    Anchor String             _SM_
                    Checksum                  0xC3
                    Length                    0x1F
                    Version                   2.4
                    Maximum Structure Size    0x00BA
                    Entry Point Revision      0x00
                    Formatted Area            0x00 0x00 0x00 0x00 0x00
                    Intermediate Anchor       _DMI_
                    Intermediate Checksum     0xC4
                    Structure Table Length    0x0465
                    Structure Table Address   0x000FD640     <--- указатель на структуру 'BIOS-Info'
                    Number of Structures      0x0016
                    wNumSMBStruc              0x00

                  дальше, ..в заголовке видим адрес 0x000FD640 - это и есть адрес первой структуры 'BIOS-Info'.
                  Соответственно разница между ними: 0xFD640 - 0xFAFF0 = 0x2650 (~9K). Делаю вывод, что сама DMI-таблица находится в другом/свободном месте физ.памяти и не прижата к заголовку:
                  ExpandedWrap disabled
                    [BIOS Information] (Type 0)
                    00 18 00 00 01 02 00 F0 03 07 80 9A 8B 7F 01 00   ................
                    00 00 33 07 08 0C FF FF 41 6D 65 72 69 63 61 6E   ..3.....American
                    20 4D 65 67 61 74 72 65 6E 64 73 20 49 6E 63 2E   Megatrends Inc.
                    00 50 31 2E 32 30 00 30 32 2F 30 35 2F 32 30 30   .P1.20.02/05/200
                    39 00 00                                          9..            
                     
                    Type                      0x00 (0)
                    Length                    0x18 (24)
                    Handle                    0x0000 (0)
                    BIOS Vendor               String1 - "American Megatrends Inc."
                    BIOS Version              String2 - "P1.20"
                    Start Address Segment     0xF000
                    Release Date              String3 - "02/05/2009"
                    ROM Size                  0x07 (512KB)
                    BIOS Characteristics      0x000000017F8B9A80
                      Bit0                    Reserved - 0 (No)
                      Bit1                    Reserved - 0 (No)
                      Bit2                    Unknown  - 0 (No)
                      Bit3                    BIOS Characteristics Not Supported - 0 (No)


                  user posted image
                    core-i7, да, это Ralf Brown, но в спецификации SMBIOS такая же фигня, ничего про эту канитель со странными первыми 8-ю байтами я не нашёл.
                    В общем, я накатал вот такую прогу для проверки поддержки EDD:
                    ExpandedWrap disabled
                      ; fasm 1 (Windows Vista/XP Pro x64 +)
                      format  PE Console 5.0
                       
                      include 'win32axp.inc'
                      include 'simport.inc'
                       
                      ;-- CODE SECTION -------------------------------------------------------------------------------------------------------
                       
                      FirmText    equ 'RSMB'
                      FirmSign    =   FirmText shr 24 + (FirmText shr 8) and 0xFF00 + (FirmText shl 8) and 0xFF0000 + (FirmText shl 24) and 0xFF000000
                      FirmTable   =   0
                       
                      BUFFER_SIZE =   65536
                      SHOW_READ_OK    =   1
                      SAVE_TO_FILE    =   1
                      SHOW_FLAG_QWORD =   1
                       
                      .code
                       
                      start:
                       
                              ; Read raw SMBIOS firmware table
                              invoke  GetSystemFirmwareTable, FirmSign, FirmTable, Table, BUFFER_SIZE
                              test    eax,eax
                              jz  .readerror
                              cmp eax,BUFFER_SIZE
                              ja  .toolarge
                              mov [TableSize],eax
                      if defined SHOW_READ_OK & SHOW_READ_OK
                              cinvoke printf, <FirmText,' table is read (size = %d bytes)!',10>, eax
                      end if
                       
                      if defined SAVE_TO_FILE & SAVE_TO_FILE
                              ; Save table to file
                              stdcall SaveToFile
                      end if
                              ; Check of EDD support and show results
                              stdcall GetBIOSChars
                              jc  .notfound
                       
                      if defined SHOW_FLAG_QWORD & SHOW_FLAG_QWORD
                              push    eax
                              cinvoke printf, <'BIOS Characteristics QWORD = %08X%08X',10>, edx, eax
                              pop eax
                      end if
                              btc eax,19
                              jnc @F
                              cinvoke printf, <'EDD is supported!',10>
                              jmp .finish
                          @@: cinvoke printf, <'EDD is NOT supported :(',10>
                       
                              ; Finalization
                          .finish:
                              cinvoke printf, <'Press a key to exit...',10>
                              cinvoke getch
                              invoke  ExitProcess, 0
                          .readerror:
                              cinvoke printf, <FirmText,' table read error :(',10>
                              jmp .finish
                          .toolarge:
                              cinvoke printf, <FirmText,' table too large (%d bytes)',10>, eax
                              jmp .finish
                          .notfound:
                              cinvoke printf, <'No correct BIOS Information structure is found :(',10>
                              jmp .finish
                       
                      ; Get BIOS Characteristic QWORD (EDX:EAX, CF=0) or CF=1 on error
                      proc        GetBIOSChars    uses esi
                              ; Search for BIOS Information structure
                              cld
                              mov esi,Table
                              mov edx,[TableSize]
                              add edx,esi         ; table end
                          .next:
                              mov ecx,esi         ; structure start
                              xor eax,eax
                              lodsb               ; structure type
                              cmp al,127
                              je  .notfound       ; jump if end-of-table type
                              test    al,al
                              lodsb               ; structure size
                              lea esi,[eax+ecx]       ; structure end, start of strings
                              jnz .skipstrings        ; jump if type <> 0 (BIOS Information)
                              cmp al,2
                              jb  .notfound       ; WTF???
                              cmp al,12h
                              jnb .ok         ; no jump if bad structure (no BIOS Characteristics qword in this structure)
                          .skipstrings:
                          @@: mov ah,al           ; al <> 0 for the first time
                              lodsb
                              test    eax,eax
                              jnz @B          ; searching for strings end (double 0)
                              cmp esi,edx
                              jb  .next           ; check next structure
                              ; Structure is NOT found
                          .notfound:
                              stc             ; CF=1 (error)
                              ret
                          .ok:    ; Structure is found (CF=0, because jumped here by jnb = jnc)
                              mov eax,[ecx+0Ah]       ; BIOS Characteristics low dword
                              mov edx,[ecx+0Eh]       ; BIOS Characteristics high dword
                              ret
                      endp
                       
                      ; Save table to file
                      proc        SaveToFile  uses ebx
                              invoke  CreateFile, <FirmText,#'.bin'>, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
                              cmp eax,INVALID_HANDLE_VALUE
                              je  .createerror
                              mov ebx,eax
                              invoke  WriteFile, ebx, Table, [TableSize], Written, 0
                              test    eax,eax
                              jz  .writeerror
                              cmp [Written],ebx
                              jb  .writeerror
                              cinvoke printf, <'Table is saved to file!',10>
                          .continue:
                              invoke  CloseHandle, ebx
                              ret
                          .createerror:
                              cinvoke printf, <'File create error :(',10>
                              ret
                          .writeerror:
                              cinvoke printf, <'File write error :(',10>
                              jmp .continue
                      endp
                       
                      ;-- DATA SECTION -------------------------------------------------------------------------------------------------------
                       
                      .data
                       
                      Written     rd  1
                      TableSize   rd  1
                      Table       rb  BUFFER_SIZE
                      ZeroWord    rw  1
                       
                      simport     kernel32, GetSystemFirmwareTable
                       
                      slibrary    msvcrt, 'msvcrt.dll'
                      simport     msvcrt,\
                              printf, ,\
                              getch, '_getch'
                       
                      .end        start

                    simport.inc:
                    ExpandedWrap disabled
                      ; WinAPI function import (written by Tomasz Grysztar, square brackets [] added by Jin X)
                      ; usage:
                      ;   simport kernel32, GetFirmwareEnvironmentVariableA  ; function name string can be omitted (like here)
                      ;   api GetFirmwareEnvironmentVariable  ; only for functions with 'A' or 'W' suffix
                      macro   simport library_label*, [label*, string]
                      {
                          match ,string \{ define library_label#.collection label,`label \}
                          match any, string \{ define library_label#.collection label,string \}
                      }
                       
                      ; wrapper of import macros (written by Tomasz Grysztar)
                      macro   import  library_label*, list&
                      {
                          common
                              local all
                              define all
                              irpv a, library_label#.collection \{ all equ all , a \}
                              match a, list \{ all equ , list all \}
                              match complete, all \{ import library_label complete \}
                      }
                       
                      ; DLL library import (written by Tomasz Grysztar)
                      ; usage:
                      ;   slibrary msvcrt  ; dll name string can be omitted (like here)
                      ;   simport msvcrt, printf  ; function name string can be omitted (like here)
                      ;  or:
                      ;   simport msvcrt, printf,, getch, '_getch', scanf
                      macro   slibrary    library_label*, string
                      {
                          match ,string \{ define import_library library_label,`library_label#'.DLL' \}
                          match any, string \{ define import_library library_label,string \}
                      }
                       
                      ; wrapper of library macros (written by Tomasz Grysztar)
                      macro   library list&
                      {
                          common
                              local all
                              define all
                              irpv a, import_library \{ all equ all , a \}
                              match complete, list all \{ library complete \}
                              irpv a, import_library \{ match library_label=,string, a \\{ import library_label \\} \}
                      }


                    Добавлено
                    Нашёл эи 8 байт!
                    Оказывается GetSystemFirmwareTable возвращает структуру:
                    ExpandedWrap disabled
                      struct RawSMBIOSData
                      {
                          BYTE    Used20CallingMethod;
                          BYTE    SMBIOSMajorVersion;
                          BYTE    SMBIOSMinorVersion;
                          BYTE    DmiRevision;
                          DWORD    Length;
                          BYTE    SMBIOSTableData[];
                      };
                    Сообщение отредактировано: Jin X -
                      Итого имеем...
                      EDDSupportCheck.fasm:
                      ExpandedWrap disabled
                        ; fasm 1 (Windows Vista/XP Pro x64 +)
                        format  PE Console 5.0
                         
                        include 'win32axp.inc'
                        include 'simport.inc'
                         
                        ;-- CODE SECTION -------------------------------------------------------------------------------------------------------
                         
                        FirmText    equ 'RSMB'
                        FirmSign    =   FirmText shr 24 + (FirmText shr 8) and 0xFF00 + (FirmText shl 8) and 0xFF0000 + (FirmText shl 24) and 0xFF000000
                        FirmTable   =   0
                         
                        MAX_TABLE_SIZE  =   65536
                        BUFFER_SIZE =   MAX_TABLE_SIZE+8    ; 8 bytes of header
                        SHOW_READ_OK    =   1
                        ;SAVE_TO_FILE   =   1
                        SHOW_FLAG_QWORD =   1
                         
                        .code
                         
                        start:
                         
                                ; Read raw SMBIOS firmware table
                                invoke  GetSystemFirmwareTable, FirmSign, FirmTable, Buffer, BUFFER_SIZE
                                test    eax,eax
                                jz  .readerror
                                cmp eax,BUFFER_SIZE
                                ja  .toolarge
                        if defined SHOW_READ_OK & SHOW_READ_OK
                                movzx   ecx,[Buffer+1]
                                movzx   edx,[Buffer+2]
                                sub eax,8
                                cinvoke printf, <'SMBIOS table is read (size = %d bytes + 8 bytes of raw data header)!',10,\
                                         'SMBIOS version %d.%d',10>, eax, ecx, edx
                        end if
                         
                        if defined SAVE_TO_FILE & SAVE_TO_FILE
                                ; Save table to file
                                stdcall SaveToFile
                        end if
                                ; Check of EDD support and show results
                                stdcall GetBIOSChars
                                jc  .notfound
                         
                        if defined SHOW_FLAG_QWORD & SHOW_FLAG_QWORD
                                push    eax
                                cinvoke printf, <'BIOS Characteristics QWORD = %08X%08X',10>, edx, eax
                                pop eax
                        end if
                                btc eax,19
                                jnc @F
                                cinvoke printf, <'EDD is supported!',10>
                                jmp .finish
                            @@: cinvoke printf, <'EDD is NOT supported :(',10>
                         
                                ; Finalization
                            .finish:
                                cinvoke printf, <'Press a key to exit...',10>
                                cinvoke getch
                                invoke  ExitProcess, 0
                            .readerror:
                                cinvoke printf, <'SMBIOS table read error :(',10>
                                jmp .finish
                            .toolarge:
                                cinvoke printf, <'SMBIOS raw table is too large (%d bytes)',10>, eax
                                jmp .finish
                            .notfound:
                                cinvoke printf, <'BIOS Information structure is not found :(',10>
                                jmp .finish
                         
                        ; Get BIOS Characteristic QWORD in EDX:EAX and address of structure start in ECX if CF=0 or CF=1 on error
                        proc        GetBIOSChars    uses esi
                                ; Search for BIOS Information structure
                                cld
                                mov esi,Table
                                mov edx,[TableSize]
                                add edx,esi         ; table end
                            .next:
                                mov ecx,esi         ; structure start
                                xor eax,eax
                                lodsb               ; structure type
                                cmp al,127
                                stc             ; CF=1 if next just will occur
                                je  .finish         ; jump if end-of-table type
                                test    al,al
                                lodsb               ; structure size
                                lea esi,[eax+ecx]       ; structure end, start of strings
                                jz  .oktype         ; jump if type = 0 (BIOS Information)
                                ; Skip strings
                            @@: mov ah,al           ; AL <> 0 for the first pass
                                lodsb
                                test    eax,eax
                                jnz @B          ; searching for strings end (double 0)
                                cmp esi,edx
                                jb  .next           ; check next structure (of continue with AL = 0)
                            .oktype:
                                cmp al,12h
                                jb  .finish         ; jump if bad structure (structure must be at least 12h bytes in size) [CF=1]
                                ; Structure is found [CF=0]
                                mov eax,[ecx+0Ah]       ; BIOS Characteristics low dword
                                mov edx,[ecx+0Eh]       ; BIOS Characteristics high dword
                            .finish:
                                ret             ; CF=0 if ok, CF=1 on error
                        endp
                         
                        ; Save table to file
                        proc        SaveToFile  uses ebx
                                invoke  CreateFile, <'SMBIOSTable.bin'>, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
                                cmp eax,INVALID_HANDLE_VALUE
                                je  .createerror
                                mov ebx,eax
                                invoke  WriteFile, ebx, Table, [TableSize], Written, 0
                                test    eax,eax
                                jz  .writeerror
                                cmp [Written],ebx
                                jb  .writeerror
                                cinvoke printf, <'Table is saved to file!',10>
                            .continue:
                                invoke  CloseHandle, ebx
                                ret
                            .createerror:
                                cinvoke printf, <'File create error :(',10>
                                ret
                            .writeerror:
                                cinvoke printf, <'File write error :(',10>
                                jmp .continue
                        endp
                         
                        ;-- DATA SECTION -------------------------------------------------------------------------------------------------------
                         
                        .data
                         
                        Buffer      rb  4
                        TableSize   rd  1
                        Table       rb  MAX_TABLE_SIZE
                        ZeroWord    rw  1           ; just in case
                         
                        virtual at Buffer
                          Written   rd  1
                        end virtual
                         
                        simport     kernel32, GetSystemFirmwareTable
                         
                        slibrary    msvcrt, 'msvcrt.dll'
                        simport     msvcrt,\
                                printf, ,\
                                getch, '_getch'
                         
                        .end        start

                      simport.inc:
                      ExpandedWrap disabled
                        ; WinAPI function import (written by Tomasz Grysztar, square brackets [] added by Jin X)
                        ; usage:
                        ;   simport kernel32, GetFirmwareEnvironmentVariableA  ; function name string can be omitted (like here)
                        ;   api GetFirmwareEnvironmentVariable  ; only for functions with 'A' or 'W' suffix
                        macro   simport library_label*, [label*, string]
                        {
                            match ,string \{ define library_label#.collection label,`label \}
                            match any, string \{ define library_label#.collection label,string \}
                        }
                         
                        ; wrapper of import macros (written by Tomasz Grysztar)
                        macro   import  library_label*, list&
                        {
                            common
                                local all
                                define all
                                irpv a, library_label#.collection \{ all equ all , a \}
                                match a, list \{ all equ , list all \}
                                match complete, all \{ import library_label complete \}
                        }
                         
                        ; DLL library import (written by Tomasz Grysztar)
                        ; usage:
                        ;   slibrary msvcrt  ; dll name string can be omitted (like here)
                        ;   simport msvcrt, printf  ; function name string can be omitted (like here)
                        ;  or:
                        ;   simport msvcrt, printf,, getch, '_getch', scanf
                        macro   slibrary    library_label*, string
                        {
                            match ,string \{ define import_library library_label,`library_label#'.DLL' \}
                            match any, string \{ define import_library library_label,string \}
                        }
                         
                        ; wrapper of library macros (written by Tomasz Grysztar)
                        macro   library list&
                        {
                            common
                                local all
                                define all
                                irpv a, import_library \{ all equ all , a \}
                                match complete, list all \{ library complete \}
                                irpv a, import_library \{ match library_label=,string, a \\{ import library_label \\} \}
                        }

                      Прикреплённый файлПрикреплённый файлEDDSupportCheck.zip (3,23 Кбайт, скачиваний: 152)

                      Добавлено
                      Можно, конечно, так не заморачиваться, а просто проверять первый байт (вернее, 9-й, т.е. со смещением 8, если брать Raw SMBIOS table) на значение 0, а второй - на значение 12h+ (чтоб был не меньше), а дальше уже по смещению 0Ah берём 19-й бит (а точнее test byte [Buffer+0Ch],8).

                      Добавлено
                      Хоть в спецификации и не сказано, что структура BIOS Information (тип 0) должна быть первой, наверняка всегда (или почти всегда) так и есть. Но я бы лучше подстраховался и сделал нормально (как в коде выше).
                        Jin X, прикольно.. закинем в сундучок.
                        а для систем ХР можно реализовать так-же, и читать SMBIOS хоть ком-файлом чз NTVDM
                          Так же, наверное, не выйдет, т.к. заветной функции нет в XP (32-битной, по крайней мере).
                          Можно попробовать через \\Device\PhysicalMemory. И там искать сигнатуру _SM_ или _SM3_ (я пока не понял, есть ли в SMBIOS 3.0 _SM_ тоже или только _SM3_) и дальше выходить на таблицу.

                          Добавлено
                          Ну или WMI как универсальный способ...
                            Короче, сделал я так, что теперь всё работает и на Windows XP, и на более свежих.
                            Правда, я не проверял, можно ли заменить NtOpenSection на CreateFile + CreateFileMapping, но не думаю, что тут будет какой-то профит (по размеру файла).
                            Ну и ещё, конечно, можно заменить MapViewOfFile на NtMapViewOfSection (чтобы раз начали с натива, то и дальше в том же духе), но пока заморачиваться не хочется, а хочется спать :)
                            Исходники в аттаче (постить в лом).
                            Прикреплённый файлПрикреплённый файлEDDSupportCheck.zip (4,67 Кбайт, скачиваний: 140)
                              Цитата Jin X @
                              теперь всё работает и на Windows XP, и на более свежих.

                              ..у меня почему-то выдаёт эррор:
                              Цитата
                              SMBIOS table read error :(
                              Press a key to exit...
                                Хм, у меня на виртуалке работает.
                                Будем разбираться тогда. Запустите дебаг-версию, какие данные она выдаст?
                                Прикреплённый файлПрикреплённый файлEDDSupportCheckDEBUG.zip (4,45 Кбайт, скачиваний: 152)
                                Сообщение отредактировано: Jin X -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0650 ]   [ 20 queries used ]   [ Generated: 24.04.24, 18:07 GMT ]