1

Windows ディスクの管理スナップインを使用して、いくつかの仮想ハード ディスク (VHD) を作成、初期化、およびフォーマットしました。これらの VHD を手動で簡単にアタッチしてアクセスできますが、API を介した管理に問題があります。

仮想ディスクが接続された後、そのボリュームのドライブ文字を簡単に確認する方法が見つかりません。次のアプローチを見つけましたが、かなり複雑なようです。より良い方法はありますか?

これが私がこれまでに持っているものです...それほど多くはありません。

var
  StorageType: TVirtualStorageType;
  Path: UnicodeString;
  Handle: THandle;
begin
  StorageType.DeviceId := VIRTUAL_STORAGE_TYPE_DEVICE_VHD;
  StorageType.VendorId := VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT;

  Path := 'C:\tmp\small-usb.vhd';

  OpenVirtualDisk(@StorageType, PWideChar(Path), VIRTUAL_DISK_ACCESS_ALL,  OPEN_VIRTUAL_DISK_FLAG_NONE, nil, @Handle);
  AttachVirtualDisk(Handle, nil, ATTACH_VIRTUAL_DISK_FLAG_NONE, 0, nil, nil);
  // volume is visible in windows explorer at this point but   
  // I don't know the drive letter
end
4

1 に答える 1

0

これが最善の方法かどうかはわかりませんがGetVirtualDiskPhysicalPath、マウントされた VHD のパスを " \\.\PhysicalDriveX" 形式で取得するために使用できます。そのパスを使用して、ディスクに含まれるボリュームのディスク オブジェクトをクエリで取得し (物理ハード ディスクと同様に、VHD には複数のパーティションとボリュームを含めることができることを忘れないでください)、割り当てられたマウント ポイントのリストを取得できます。 (必ずしもドライブ文字である必要はありません。VHD は NTFS マウント ポイントにマウントできます)。

提供されたサンプルで使用している言語に精通していません。それはデルフィですか?

于 2013-11-05T22:50:22.220 に答える