мини Partition Magic.

  • Автор темы _Leo_
  • Дата начала
Статус
Закрыто для дальнейших ответов.
L

_Leo_

#1
Вот думаю написать программу на Visual C++, которая позволила бы из под Windows удалить раздел FAT 32, востановить раздел.
Что то типа мини Partition Magic.
Можно ли это сделать лишь используя фунукции WinAPI?


Почитал MSDN, полазил в Инете, и вот что выяснил:


на сколько я понял видимость раздела Windows, определяется значением кода типа раздела System ID в таблице разделов.Если он равен нулю, то раздел не виден.

Структура MBR
Смещение (offset) Размер (Size) Содержимое (contents)
-------------------------------------------------------------------------
0 446 Программа анализа таблицы разделов
и загрузки System Bootstrap
с активного раздела
-------------------------------------------------------------------------
0x1BE 16 Partition 1 entry ( элемент таблицы разделов)
-------------------------------------------------------------------------
0x1CE 16 Partition 2 entry
-------------------------------------------------------------------------
0x1DE 16 Partition 3 entry
-------------------------------------------------------------------------
0x1EE 16 Partition 4 entry
-------------------------------------------------------------------------
0x1FE 2 Сигнатура 0xAA55

Структура записи элемента таблицы разделов показана в таблице 2.




Структура записи элемента таблицы разделов

Смещение Размер поля, Содержание
байт
-------------------------------------------------------------------------
0x00 1 Признак активности (0 - раздел не активный,
0x80 - раздел активный)
--------------------------------------------------------------------------
0x01 1 Номер головки диска, с которой
начинается раздел
---------------------------------------------------------------------------
0x02 2 Номер цилиндра и номер сектора, с которых
начинается раздел
----------------------------------------------------------------------------
0x04 1 Код типа раздела System ID
----------------------------------------------------------------------------
0x05 1 Номер головки диска, на которой
заканчивается раздел
----------------------------------------------------------------------------
0x06 2 Номер цилиндра и номер сектора, которыми
заканчивается раздел
----------------------------------------------------------------------------
0x08 4 Абсолютный (логический) номер начального
сектора раздела
----------------------------------------------------------------------------
0x0C 4 Размер раздела (число секторов)


Только не совсем понял как читать/записать в этот System ID с помощью контрол-кода
IOCTL_DISK_GET_DRIVE_LAYOUT_EX/IOCTL_DISK_SET_DRIVE_LAYOUT_EX.

Вроде надо работать со структурой PARTITION_INFORMATION_EX или просто
отсчитать смещение в 450 байт от значения StartingOffset и жахнуть туда ноль.

Вобшем нажал на кнопочку и раздел fat32 не виден, нажал на другую, и о радость!!!,
он появился.
 
Статус
Закрыто для дальнейших ответов.