На главную Наши проекты:
Журнал   ·   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?
    Всем привет.
    Необходимо из-под Windows (включая x64) проверить - поддерживает ли BIOS'овский int 13h расширенные функции работы с дисками (ah=4xh... 64-битную LBA-адресацию, по сути). Можно ли это сделать? И как?

    Т.е. пишется код для MBR, который будет использовать эти функции, но инсталлироваться он будет из-под Windows.
    Соответственно, если BIOS не поддерживает такие функции, загрузка будет невозможна.
    Поэтому нужна предварительная проверка.

    Я понимаю, что такая поддержка появилась уже давным-давно, но всё же для надёжности хочется сделать проверку.
    И я понимаю, что диск можно перенести на другой комп, где может быть по-другому, тем не менее.
      Цитата Jin X @
      проверить - поддерживает ли BIOS'овский int 13h расширенные функции работы с дисками (ah=4xh... 64-битную LBA-адресацию, по сути). Можно ли это сделать? И как?

      можно попробовать считать SMBIOS/ACPI таблицы
      бит 19 в разделе BIOS хранит инфу о поддержке EDD - Enhanced-Disk-Drive:
      Скрытый текст
      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)
          Bit4                  ISA is supported - 0 (No)
          Bit5                  MCA is supported - 0 (No)
          Bit6                  EISA is supported - 0 (No)
          Bit7                  PCI is supported - 1 (Yes)
          Bit8                  PC Card (PCMCIA) is supported - 0 (No)
          Bit9                  Plug and Play is supported - 1 (Yes)
          Bit10                 APM is supported - 0 (No)
          Bit11                 BIOS is Upgradeable (Flash) - 1 (Yes)
          Bit12                 BIOS shadowing is allowed - 1 (Yes)
          Bit13                 VL-VESA is supported - 0 (No)
          Bit14                 ESCD support is available - 0 (No)
          Bit15                 Boot from CD is supported - 1 (Yes)
          Bit16                 Selectable Boot is supported - 1 (Yes)
          Bit17                 BIOS ROM is socketed - 1 (Yes)
          Bit18                 Boot From PC Card (PCMCIA) is supported - 0 (No)
          Bit19                 EDD (Enhanced Disk Drive) Specification is supported - 1 (Yes)
          Bit20                 Int 13h - Japanese Floppy for NEC 9800 1.2mb (3.5", 1k Bytes/Sector, 360 RPM) is supported - 0 (No)
          Bit21                 Int 13h - Japanese Floppy for Toshiba 1.2mb (3.5", 360 RPM) is supported - 0 (No)
          Bit22                 Int 13h - 5.25" / 360 KB Floppy Services are supported - 0 (No)
          Bit23                 Int 13h - 5.25" / 1.2MB Floppy Services are supported - 1 (Yes)
          Bit24                 Int 13h - 3.5" / 720 KB Floppy Services are supported - 1 (Yes)
          Bit25                 Int 13h - 3.5" / 2.88 MB Floppy Services are supported - 1 (Yes)
          Bit26                 Int 5h, Print Screen Service is supported - 1 (Yes)
          Bit27                 Int 9h, 8042 Keyboard services are supported - 1 (Yes)
          Bit28                 Int 14h, Serial Services are supported - 1 (Yes)
          Bit29                 Int 17h, Printer Services are supported - 1 (Yes)
          Bit30                 Int 10h, CGA/Mono Video Services are supported - 1 (Yes)
          Bit31                 NEC PC-98 - 0 (No)
        Characteristics Ext1    0x33
          Bit0                  ACPI supported - 1 (Yes)
          Bit1                  USB Legacy is supported - 1 (Yes)
          Bit2                  AGP is supported - 0 (No)
          Bit3                  I2O boot is supported - 0 (No)
          Bit4                  LS-120 boot is supported - 1 (Yes)
          Bit5                  ATAPI ZIP Drive boot is supported - 1 (Yes)
          Bit6                  1394 boot is supported - 0 (No)
          Bit7                  Smart Battery supported - 0 (No)
        Characteristics Ext2    0x07
          Bit0                  BIOS Boot Specification supported - 1 (Yes)
          Bit1                  Function key-initiated Network Service boot supported - 1 (Yes)
          Bit2                  Enable Targeted Content Distribution - 1 (Yes)
          Bit3                  UEFI Specification is supported - 0 (No)
          Bit4                  SMBIOS table describes a virtual machine - 0 (No)
        BIOS Release            8.12
        EC Release          0xFFFF - Not supported

      только универсального метода подобраться к этим таблицам из юзер-моды вроде нет
      до Win-XP включительно можно функцией NtOpenSection (Device\PhysicalMemory)
      а начиная с висты уже легче.. там есть GetSystemFirmwareTable
        GetSystemFirmwareTable (вместе с EnumSystemFirmwareTables) у меня не пашет, возвращает нули, а GetLastError = 1 (ERROR_INVALID_FUNCTION)
        Win10 x64
          а kernel32.dll вообще экспортирует эту функцию, проверял?
          можно прямо в тотале открыть по [Ctrl+Q] кернел32, и посмотреть экспорт.
          у меня ХР - FirmwareTable в списке нет, соответственно и проверить не могу
          Сообщение отредактировано: core-i7 -
            core-i7, конечно экспортирует, иначе прога не запустилась бы (или GetProcAddress выдал бы 0, если через него делать).
              Да, EnumSystemFirmwareTables и GetSystemFirmwareTable экспортируются в Win10 x64 из kernel32.dll.
                в подвале этого линка есть пример (176 Kb), попробуй его запустить на своей десятке.
                он открывает доступ к физ.памяти чз 'Device\PhysicalMemory'.. чем чёрт не шутит:
                http://www.delphiplus.org/articles/api/mem_read/index.html

                Добавлено
                Цитата Jin X @
                конечно экспортирует

                тогда GetLastError не должен возвращать единицу INVALID_FUNCTION
                  Цитата core-i7 @
                  он открывает доступ к физ.памяти чз 'Device\PhysicalMemory'.. чем чёрт не шутит
                  Даже в описании функции GetSystemFirmwareTable написано:
                  Цитата
                  As of Windows Server 2003 with Service Pack 1 (SP1), applications cannot access the \Device\PhysicalMemory object. Access to this object is limited to kernel-mode drivers.
                  Но я попробовал, конечно (от админа). И ничего не вышло. Что неудивительно :)
                  Но там GetSystemFirmwareTable даже и не используется.

                  Цитата core-i7 @
                  тогда GetLastError не должен возвращать единицу INVALID_FUNCTION
                  Какая тут связь? Если функция не экспортируется, прога просто не запускается, а ошибка "invalid function" выдаётся во многих других случаях.
                    У меня GetSystemFirmwareTable успешно отрабатывает.
                      Цитата Jin X @
                      Какая тут связь?

                      ..прямая! если функция в библиотеке есть, она должна отработать.
                      в противном случае, вина лежит на программисте - возможно криво оформил или нет прав

                      Добавлено
                      Цитата Славян @
                      У меня GetSystemFirmwareTable успешно отрабатывает.

                      а можно посмотреть, что она возвращает в буфер?
                        Конечно можно. Только я 'от балды' запилил в аргументы значения из справки:
                        ExpandedWrap disabled
                          char pBufffer[512];
                          unsigned ret = GetSystemFirmwareTable( 'ACPI', 'PCAF', pBufffer, sizeof(pBufffer));
                        Она и вернула 0xF4 байт всяких двоичных данных.
                          Славян буфер для данных smbios нужен как-мин 1000h, и дальше:
                          ExpandedWrap disabled
                            // Получить таблицу SMBIOS
                            bytesWritten = GetSystemFirmwareTable ('RSMB', 0, smBiosData, smBiosDataSize);


                          Добавлено
                          размер буфера можно получить так:
                          ExpandedWrap disabled
                            // Размер данных SMBIOS.
                            smBiosDataSize = GetSystemFirmwareTable ('RSMB', 0, NULL, 0);
                            Хор. Минутку.

                            Добавлено
                            Ну получил. Вагон двоичных данных. Там есть и этот Megatrends, название мат.платы и всё такое. Что именно надо?
                              в шапке там должно быть типа такого (по крайней мере у меня)..
                              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         <-- общий размер SMBIOS-таблицы
                                Structure Table Address    0x000FD640     <-- адрес первой таблицы (данные BIOS)
                                Number of Structures       0x0016         <-- всего структур
                                wNumSMBStruc               0x00
                                Всё, вкурил. Там почти как и в вашем примере. Только у вас хвост: 80 9A 8B 7F 01, а у меня 90 DA 8B 7F 01.
                                Т.е. у меня ISA Supported, и EDD тоже есть.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0471 ]   [ 16 queries used ]   [ Generated: 16.04.24, 17:39 GMT ]