Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.112.1] |
|
Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Всем привет.
Необходимо из-под Windows (включая x64) проверить - поддерживает ли BIOS'овский int 13h расширенные функции работы с дисками (ah=4xh... 64-битную LBA-адресацию, по сути). Можно ли это сделать? И как? Т.е. пишется код для MBR, который будет использовать эти функции, но инсталлироваться он будет из-под Windows. Соответственно, если BIOS не поддерживает такие функции, загрузка будет невозможна. Поэтому нужна предварительная проверка. Я понимаю, что такая поддержка появилась уже давным-давно, но всё же для надёжности хочется сделать проверку. И я понимаю, что диск можно перенести на другой комп, где может быть по-другому, тем не менее. |
Сообщ.
#2
,
|
|
|
Цитата Jin X @ проверить - поддерживает ли BIOS'овский int 13h расширенные функции работы с дисками (ah=4xh... 64-битную LBA-адресацию, по сути). Можно ли это сделать? И как? можно попробовать считать SMBIOS/ACPI таблицы бит 19 в разделе BIOS хранит инфу о поддержке EDD - Enhanced-Disk-Drive: Скрытый текст [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 |
Сообщ.
#3
,
|
|
|
GetSystemFirmwareTable (вместе с EnumSystemFirmwareTables) у меня не пашет, возвращает нули, а GetLastError = 1 (ERROR_INVALID_FUNCTION)
Win10 x64 |
Сообщ.
#4
,
|
|
|
а kernel32.dll вообще экспортирует эту функцию, проверял?
можно прямо в тотале открыть по [Ctrl+Q] кернел32, и посмотреть экспорт. у меня ХР - FirmwareTable в списке нет, соответственно и проверить не могу |
Сообщ.
#5
,
|
|
|
core-i7, конечно экспортирует, иначе прога не запустилась бы (или GetProcAddress выдал бы 0, если через него делать).
|
Сообщ.
#6
,
|
|
|
Да, EnumSystemFirmwareTables и GetSystemFirmwareTable экспортируются в Win10 x64 из kernel32.dll.
|
Сообщ.
#7
,
|
|
|
в подвале этого линка есть пример (176 Kb), попробуй его запустить на своей десятке.
он открывает доступ к физ.памяти чз 'Device\PhysicalMemory'.. чем чёрт не шутит: http://www.delphiplus.org/articles/api/mem_read/index.html Добавлено Цитата Jin X @ конечно экспортирует тогда GetLastError не должен возвращать единицу INVALID_FUNCTION |
Сообщ.
#8
,
|
|
|
Цитата core-i7 @ Даже в описании функции GetSystemFirmwareTable написано:он открывает доступ к физ.памяти чз 'Device\PhysicalMemory'.. чем чёрт не шутит Цитата Но я попробовал, конечно (от админа). И ничего не вышло. Что неудивительно 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 @ Какая тут связь? Если функция не экспортируется, прога просто не запускается, а ошибка "invalid function" выдаётся во многих других случаях. тогда GetLastError не должен возвращать единицу INVALID_FUNCTION |
Сообщ.
#9
,
|
|
|
У меня GetSystemFirmwareTable успешно отрабатывает.
|
Сообщ.
#10
,
|
|
|
Цитата Jin X @ Какая тут связь? ..прямая! если функция в библиотеке есть, она должна отработать. в противном случае, вина лежит на программисте - возможно криво оформил или нет прав Добавлено Цитата Славян @ У меня GetSystemFirmwareTable успешно отрабатывает. а можно посмотреть, что она возвращает в буфер? |
Сообщ.
#11
,
|
|
|
Конечно можно. Только я 'от балды' запилил в аргументы значения из справки:
char pBufffer[512]; unsigned ret = GetSystemFirmwareTable( 'ACPI', 'PCAF', pBufffer, sizeof(pBufffer)); |
Сообщ.
#12
,
|
|
|
Славян буфер для данных smbios нужен как-мин 1000h, и дальше:
// Получить таблицу SMBIOS bytesWritten = GetSystemFirmwareTable ('RSMB', 0, smBiosData, smBiosDataSize); Добавлено размер буфера можно получить так: // Размер данных SMBIOS. smBiosDataSize = GetSystemFirmwareTable ('RSMB', 0, NULL, 0); |
Сообщ.
#13
,
|
|
|
Хор. Минутку.
Добавлено Ну получил. Вагон двоичных данных. Там есть и этот Megatrends, название мат.платы и всё такое. Что именно надо? |
Сообщ.
#14
,
|
|
|
в шапке там должно быть типа такого (по крайней мере у меня)..
[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 |
Сообщ.
#15
,
|
|
|
Всё, вкурил. Там почти как и в вашем примере. Только у вас хвост: 80 9A 8B 7F 01, а у меня 90 DA 8B 7F 01.
Т.е. у меня ISA Supported, и EDD тоже есть. |