【发布时间】:2015-09-08 09:58:03
【问题描述】:
我必须编写代码以使用 c# 或 c++ 访问隐藏的磁盘分区/卷。 但找不到任何关于此事的帮助参考。
作为隐藏卷,它不包含“磁盘号”,因此您不能只键入“C:\”并访问它。 Windows 附带的“恢复分区”就是一个例子。您在资源管理器上看不到它,但它就在那里。
我的应用程序将从这些分区写入和读取数据,我必须找到一种方法来为这些分区执行“c:\”之类的操作。
在上图中,卷 5 和 6 是隐藏分区。 我在 stackoverflow 上找到了这个链接,但它只“列出”了 de 分区: https://msdn.microsoft.com/en-us/library/cc542456(v=VS.85).aspx
编辑
问题是:即使按照建议使用 WMI,我也找不到在查找文件时如何过滤卷。
例如,select * from win32_DataFile 将列出机器中的所有文件。
我认为应该是一种使用它们的 ID(或名称)过滤卷的方法。 比如:
select * from win32_DataFile
where volumeId = '\\?\Volume{2d5f3a68-75f5-44c4-aa42-716b45811916}\'
或者更漂亮的方式,比如:
var files = Directory.GetFiles(@"\\?\Volume{6ff7748e-78db-4838-8896-254b074918f5}\");
另外,我在 Partitions and Volumes 中找到了一个优秀的 awenser(它们不是一回事) https://social.technet.microsoft.com/Forums/en-US/e7b2ddd6-f245-49ed-8fec-3b6e08e75369/how-do-i-find-the-partition-guid?forum=winservergen
EDIT2
Harry 认为,使用“\.\Volume....”是恢复文件的好方法。但我找不到使用 c# 编写(创建)新文件的方法。 迄今为止最好的方法是使用 pinvoke 到 c++ CreateFile 方法/句柄。
有什么建议吗?
【问题讨论】:
-
“找不到关于此事的任何帮助参考” - 您在问题中的链接是否为您下次搜索提供了很多提示?您是否阅读了有关示例中使用的每个功能的详细信息?在这一点上,您的问题可能非常广泛...
-
在 C++ 中,您可以使用
GetLogicalDriveStringsstackoverflow.com/a/18573199/4603670 和GetDriveType
标签: c# c++ winapi wmi disk-partitioning