カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2018年05月21日(月)

iso イメージを Windows API でマウントする実験

バッチファイルとかで、iso イメージをマウントしたくなったので、
Windows API でテストコードを書いてみました。

まず、ドライブレターを指定せずに
マウントするのは比較的簡単にできます。

iso ファイルを、OpenVirtualDisk して、
AttachVirtualDisk すれば OK です。

CVirtualDisk vd;
VIRTUAL_STORAGE_TYPE vt;
vt.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_ISO;
vt.VendorId = VIRTUAL_STORAGE_TYPE_VENDOR_UNKNOWN;

DWORD ret = vd._OpenVirtualDisk(
  &vt, parser.ImagePath().c_str(),
  VIRTUAL_DISK_ACCESS_ATTACH_RO
  | VIRTUAL_DISK_ACCESS_DETACH
  | VIRTUAL_DISK_ACCESS_GET_INFO
  ,
  OPEN_VIRTUAL_DISK_FLAG_NONE,
  NULL
);
ATLASSERT(ret == 0);

ATTACH_VIRTUAL_DISK_PARAMETERS avdp;
avdp.Version = ATTACH_VIRTUAL_DISK_VERSION_1;

ret = vd._AttachVirtualDisk(
  NULL,
  ATTACH_VIRTUAL_DISK_FLAG_READ_ONLY
  | ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME,
  0,
  &avdp,
  NULL
);
ATLASSERT(ret == 0);

CVirtualDisk は HANDLE をラップする自作のクラスです。
デストラクターでクローズハンドルするのが主な役割です。

一方、ドライブレターを指定してマウントするのは結構大変です。

ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME のところに、
| ATTACH_VIRTUAL_DISK_FLAG_NO_DRIVE_LETTER を追加すると、
ドライブが割り当てられなくなるので、自分で割り当てます。

SetVolumeMountPoint でドライブを割り当てるのですが、
管理者権限で呼び出さないと失敗します。

また、SetVolumeMountPoint に渡す、
lpszVolumeName の取得も結構大変です。

OS のディスクの管理画面では、ドライブレターの変更が
管理者権限でなくともできるので何か方法があるはずと
思って調べてみると下記ページを見つけました。

Inside Mountvol.exe - CodeProject

・・・

なんか、大変そう。

ご意見・ご要望連絡窓口


<< | 2/1171PAGES | >>