мини Partition Magic.

Тема в разделе "MS Visual C++", создана пользователем _Leo_, 27 сен 2007.

Статус темы:
Закрыта.
  1. _Leo_

    _Leo_ Гость

    Вот думаю написать программу на 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 не виден, нажал на другую, и о радость!!!,
    он появился.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей