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

2024-04-23

我正在尝试创建一个新分区,对其进行格式化并通过 Python ctypes 为其分配一个新的驱动器号,使用IOCTL_SET_DRIVE_LAYOUT http://msdn.microsoft.com/en-us/library/windows/desktop/aa365188%28v=vs.85%29.aspx。我最初的编码尝试是使用这个SO页面完成的:分配更多内存时 Python ctypes 结构被覆盖 https://stackoverflow.com/questions/6669074/python-ctypes-structure-being-overwritten-when-allocating-more-memory。你可以看到定义class DeviceIoControl there.

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

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

我尝试使用格式方法Win32_卷 http://msdn.microsoft.com/en-us/library/aa394515%28v=vs.85%29.aspx,但 Win32_Volume 只返回附加到现有分区的所有 n 个现有驱动器号,而在我的情况下,该驱动器号尚未分配。

有什么建议吗?


长话短说(真的是一个长话短说!),结果,我错误地选错了分区类型 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363990%28v=vs.85%29.aspx。以前我使用PARTITION_EXTENDED 0x05,当我尝试另一个值:PARTITION_IFS 0x07后,Windows直接要求我格式化分区。为了避免这种情况,按照要求here https://stackoverflow.com/questions/10457254/how-to-create-a-partition-without-windows-assigning-a-drive-letter,我们必须等待几秒钟才能获得新的驱动器盘符,然后调用kernel32.GetLogicalDriveStringsA http://msdn.microsoft.com/en-us/library/windows/desktop/aa364975%28v=vs.85%29.aspx查询新驱动器(您必须在创建分区之前调用此函数,比较两者,您将获得新驱动器号)。由于盘符可用,我们可以轻松调用Win32_卷格式 http://msdn.microsoft.com/en-us/library/aa390432%28v=vs.85%29.aspx格式化驱动器的方法。

这是低级 kernel32 调用 + WMI 的组合,为该问题带来了成功的解决方案。如果所有功能都可以在 WMI 中使用,那对我们来说会更容易。但是,是的,这不是我们在这里遇到的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 IOCTL_DISK_SET_DRIVE_LAYOUT 创建分区后,如何在这个新创建的分区中创建新卷? 的相关文章