使用IOCTL_DISK_SET_DRIVE_LAYOUT创建分区后,如何在此新创建的分区中创建新卷?

时间:2014-04-24 00:25:41

标签: python ctypes ioctl

我正在尝试使用IOCTL_SET_DRIVE_LAYOUT创建一个新分区,对其进行格式化并通过Python ctypes为其分配一个新的驱动器号。我的初始编码尝试是使用此SO页面完成的:Python ctypes structure being overwritten when allocating more memory。您可以在那里看到class DeviceIoControl的定义。

我使用IOCTL_DISK_CREATE_DISK成功初始化磁盘,并使用IOCTL_DISK_SET_DRIVE_LAYOUT创建具有特定大小的新分区,以下是磁盘管理中的结果:

partition created successfully

..但是,如何在磁盘新创建的分区中创建新卷?

我尝试使用Win32_Volume的格式化方法,但Win32_Volume只返回附加到现有分区的所有n个现有驱动器号,而在我的情况下,尚未分配该驱动器号。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

长话短说(这真是一个很长的故事!),结果,我错误地选择了错误的PartitionType。以前我使用PARTITION_EXTENDED 0x05,在我试验另一个值后:PARTITION_IFS 0x07,Windows直接要求我格式化分区。为了避免这种情况,正如here所述,我们必须等待几秒钟才能使新的驱动器号可用,然后调用kernel32.GetLogicalDriveStringsA来查询新的驱动器(之前必须先调用它)创建分区,并比较这两个,您将获得新的驱动器号)。由于驱动器号可用,我们可以轻松调用Win32_Volume Format方法来格式化驱动器。

这是低级别kernel32调用+ WMI的混合,为此问题带来了成功的解决方案。如果WMI中提供了所有功能,那么对我们来说会更容易。但是,是的,我们不是在这里遇到的。