我正在尝试在 Windows 10 上使用 python 挂载 iso 文件。代码如下:
import ctypes
from ctypes import wintypes
ByteArray8 = wintypes.BYTE * 8
src = r'F:\Backup\ubuntu.iso'
class GUID(ctypes.Structure):
_fields_ = [
("Data1", ctypes.c_long),
("Data2", ctypes.c_short),
("Data3", ctypes.c_short),
("Data4", ByteArray8)
]
guid = GUID(0xec984aec, 0xa0f9, 0x47e9, ByteArray8(0x90, 0x1f, 0x71, 0x41, 0x5a, 0x66, 0x34, 0x5b))
class VIRTUAL_STORAGE_TYPE(ctypes.Structure):
_fields_ = [
('DeviceId', ctypes.c_ulong),
('VendorId', GUID)
]
virtual_storage_type = VIRTUAL_STORAGE_TYPE(1, guid)
handle = wintypes.HANDLE()
Path = ctypes.c_wchar_p(src)
print(
ctypes.windll.virtdisk.OpenVirtualDisk(
ctypes.byref(virtual_storage_type),
Path,
0x000d0000,
0x00000000,
None,
ctypes.byref(handle)
)
)
print(
ctypes.windll.virtdisk.AttachVirtualDisk(
handle,
None,
0x00000001,
0,
None,
None
)
)
运行后显示两个0,表示open和attach操作成功。但资源管理器中没有显示新的驱动程序。
我想知道原因以及如何正确挂载 .iso 文件。这是参考: https://learn.microsoft.com/en-us/windows/win32/api/virtdisk/nf-virtdisk-openvirtualdisk https://learn.microsoft.com/en-us/windows/win32/api /virtdisk/nf-virtdisk-attachvirtualdisk
代码有2个问题:
功能齐全。默认情况下,磁盘在其相应的句柄关闭时关闭(程序结束时自动发生)。因此,磁盘被打开(并显示在Explorer中),但只打开了很短的一段时间(在AttachVirtualDisk调用之后直到程序结束),因此您无法看到它。为了能够使用该磁盘,请执行以下任一操作:
在使用完磁盘之前不要停止程序(在最后添加输入语句)
将磁盘生命周期与其句柄分离(使用[MS.Learn]: ATTACH_VIRTUAL_DISK_FLAG 枚举 (virtdisk.h)中的ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME标志)。 不用说,现在您必须自己分离磁盘,方法是:
从资源管理器中将其弹出
增强代码以调用DetachVirtualDisk
另外,不确定重复连接磁盘(不拆卸磁盘)会产生什么影响
编码 -未定义行为生成器。检查[SO]:通过 ctypes 从 Python 调用的 C 函数返回不正确的值(@CristiFati 的答案),以了解使用CTypes(调用函数)时的常见陷阱
代码00.py:
输出:
在上面的 2 次运行中,效果在资源管理器中可见(根据开头的解释):
为什么不使用 PowerShell?
在 python 中,你将执行以下操作: