我的用例如下:我有一个现成的 vhd 映像,需要将其挂载到路径 fe D:\vhd\active。目前,我的解决方案是 Powershell Hyper-V 和 diskpart 命令的组合,但这似乎非常肮脏和被黑:
Mount-VHD -Path D:\vhd-file.vhd -NoDriveLetter
diskpart> select vdisk file="D:\vhd-file.vhd"
diskpart> sel par 1
diskpart> assign mount="D:\vhd\active
如您所见,我使用了“NoDriveLetter”,因为我不想自动分配。我必须做的“sel par 1”,因为我发现没有更简单的方法来选择正确的卷(其他想法是在 Mount-VHD 之前和之后检查“lis vol”......但是是的,我总是只有一个分区所以“sel par”ftw!)
我找到了Microsoft Dev VHD Reference并且可以通过 C# pinvoke 代码“打开”和“附加”VHD 图像。我什至可以结合使用 kernel32.dll 中的 CreateFile 和带有 CREATE_DISK 参数的 DeviceIoControl 来初始化它。但我发现没有办法将它挂载到文件夹路径。我从 kernel32.dll 尝试了 SetVolumeMountPoint 和 GetVolumeNameForVolumeMountPoint,但我的 VHD 或 VirtualDiskIdentifier 的 Guid 似乎不是这些函数的正确参数。
我的问题是,是否有人可以向我指出正确的函数/方法,以实现与脚本解决方案相同的结果,但在代码中。在代码中意味着 C/C++ 或 C# ...如果在纯 C 或 C++ 中更容易完成此任务,我可以编写自己的 C#-Wrappers。