ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
13 июля
464466 Топик полностью
VVB (18.11.2013 07:40, просмотров: 44) ответил plainuser на WinHex все читает из-тод того-же пользователя.
Вот мой кусок работающего кода, анализирующий MBR  /* * определение наличия отладочного раздела * Return: * false если найден диск с отладочным разделом * true если такой диск не найден (то есть требуется удалить данный элемент из вектора) */ bool DiskRecord::LogPartitionNotFound(LogDiskRecord &r) { bool rc = true; HANDLE hDisk = CreateFileA(r.diskname.data(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hDisk != INVALID_HANDLE_VALUE) { #pragma pack (1) union { uint8_t buff[512]; struct { uint8_t bootstrap[446]; struct { uint8_t status; struct { uint8_t h; uint16_t s:6; uint16_t c:10; } chs_start; uint8_t type; struct { uint8_t h; uint16_t s:6; uint16_t c:10; } chs_end; uint32_t lba_start; uint32_t lba_size; } part[4]; uint8_t b_55; uint8_t b_aa; } mbr; } mbr; #pragma pack () DWORD dwRead; ReadFile(hDisk, mbr.buff, 512, &dwRead, 0); CloseHandle(hDisk); if (dwRead == 512 && mbr.mbr.b_55 == 0x55 && mbr.mbr.b_aa == 0xAA) { /* сейчас требуется анализ MBR */ int i; for (i = 0; i < 4; i++) if (mbr.mbr.part[i].type == 0xF8) break; if (i < 4) { r.lba_begin = mbr.mbr.part[i].lba_start; r.lba_end = mbr.mbr.part[i].lba_start + mbr.mbr.part[i].lba_size; rc = false; } } } return rc; }