После того, как раздел был создан с использованием IOCTL_DISK_SET_DRIVE_LAYOUT, как мне создать новый том в этом вновь созданном разделе?

Я пытаюсь создать новый раздел, отформатировать его и присвоить ему новую букву диска с помощью типов Python, используя IOCTL_SET_DRIVE_LAYOUT . Моя первоначальная попытка кодирования была выполнена с использованием этой SO-страницы: структура ctypes Python перезаписывается при распределении большего объема памяти . Вы можете увидеть определение class DeviceIoControl .

Я успешно инициализирую диск с помощью IOCTL_DISK_CREATE_DISK и создаю новый раздел с определенным размером с помощью IOCTL_DISK_SET_DRIVE_LAYOUT, ниже приведены результаты в разделе Управление дисками:

успешно создан раздел

.. но тогда, как мне создать новый том на диске вновь созданного раздела?

Я пытаюсь использовать метод формата Win32_Volume , но Win32_Volume возвращает только все n существующих букв диска, прикрепленных к существующим разделам, в то время как в моем случае эта буква диска еще не назначена.

Любой совет?

Короче говоря (это действительно длинная история!), Получается, я ошибочно выбираю неправильный PartitionType . Раньше я использовал PARTITION_EXTENDED 0x05, который после того, как я экспериментировал с другим значением: PARTITION_IFS 0x07, Windows прямо попросил меня отформатировать раздел. И чтобы этого избежать, как мы здесь задали, мы должны ждать несколько секунд, чтобы новое письмо о диске было доступно, а затем вызывается kernel32.GetLogicalDriveStringsA для запроса нового диска (вы должны позвонить это ранее перед созданием раздела и сравнить два, вы получите новую букву диска). Поскольку доступная буква диска, мы можем легко вызвать метод Win32_Volume Format для форматирования диска.

Это сочетание низкого уровня kernel32 call + WMI, которое обеспечивает успешное решение этой проблемы. Нам будет проще, если все функции будут доступны в WMI. Но, да, это не мы здесь.