c# または c++ を使用して隠しディスク パーティション/ボリュームにアクセスするコードを作成する必要があります。しかし、この問題に関するヘルプリファレンスは見つかりませんでした。
隠しボリュームとして「ディスク文字」が含まれていないため、「C:\」と入力してアクセスすることはできません。例として、Windows に付属の「回復パーティション」があります。エクスプローラーでは見えませんが、あります。
私のアプリケーションはこれらのパーティションからデータを読み書きするので、「c:\」のような方法を見つける必要があります。
上の画像では、ボリューム 5 と 6 が隠しパーティションです。stackoverflow でこのリンクを見つけましたが、パーティションを「リスト」するだけです: 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}\");
また、パーティションとボリュームについて優れた 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 メソッド/ハンドルを使用することです。
何かアドバイス?