Задача такая: форматировать\отформатировать раздел на жестком диске в выбранной ФС (NTFS или FAT32) API-средствами, зная букву раздела, или номер раздела, или его точку монтирования.
Вот что я уже узнал:
Первое, и правильное форматирование происходит на заводе производителя HDD (когда создаются сектора на поверхности магнитного диска). Эту информацию нашел только в одном месте, и не знаю, стоит ли принимать за правду.
Есть еще 2 способа: Быстрое и Полное.
При быстром форматировании выполняется команда DeviceIoControl(hDevice, IOCTL_DISK_VERIFY,...) для проверки целостности поверхности, а затем стирается таблица файлов, при этом сами файлы остаются лежать на жестком диске, и буду перезаписываться по мере появлении новых файлов.
При полном же форматировании, так же выполняется команда DeviceIoControl(hDevice, IOCTL_DISK_VERIFY,...), а затем все файлы, указанные в таблице файлов, затираются по отдельности, а в конце процесса и сама таблица файлов затирается.
Вот как-то так.
Существует еще такая команда IOCTL_DISK_FORMAT_TRACKS_EX (но на сайте Microsoft сказано "for floppy disk devices only"
Есть еще один момент, но это уже зависит именно от механизма форматирования. Полоса прогресса, или просто проценты. Если форматирование идет в цикле, то грубо говоря прогресс зависит от N1 to N2, другой вариант если используется CallBack, то есть узнаем о прогрессе через ответ из системы.
Есть еще API функция SHFormatDrive она здесь вообще неуместна.
Вот собственно вопрос, как отформатировать раздел?

P.S. Уже умею делать аналогичные функции Diskpart'a
Clean -> IOCTL_DISK_DELETE_DRIVE_LAYOUT
Create Partition Primary -> IOCTL_DISK_CREATE_DISK + IOCTL_DISK_SET_DRIVE_LAYOUT_EX
Detail Disk -> IOCTL_DISK_GET_DRIVE_LAYOUT_EX
Подчеркиваю что аналогичные, потому что Diskpart.exe работает через vds.
Кстати, если создать разделы через IOCTL_DISK_SET_DRIVE_LAYOUT_EX то они появляются в формате RAW и требуют форматирования.