【发布时间】:2016-10-02 23:31:36
【问题描述】:
问题
我正在尝试从物理驱动器获取卷 ID。
我的代码
// define disk handle
HANDLE VDHANDLE;
// set "open disk" parameters
OPEN_VIRTUAL_DISK_PARAMETERS VHD_OPEN_PARAM;
VHD_OPEN_PARAM.Version = OPEN_VIRTUAL_DISK_VERSION_1;
VHD_OPEN_PARAM.Version1.RWDepth = OPEN_VIRTUAL_DISK_RW_DEPTH_DEFAULT;
// set storage type
VIRTUAL_STORAGE_TYPE VHD_STORAGE;
VHD_STORAGE.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_VHD;
VHD_STORAGE.VendorId = VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT;
// set "attach disk" parameters
ATTACH_VIRTUAL_DISK_PARAMETERS VHD_ATTACH_PARAM;
VHD_ATTACH_PARAM.Version = ATTACH_VIRTUAL_DISK_VERSION_1;
// open disk
if ( OpenVirtualDisk( &VHD_STORAGE, L"F:\\MyStorageBunker.vhd",
VIRTUAL_DISK_ACCESS_ALL, OPEN_VIRTUAL_DISK_FLAG_NONE,
&VHD_OPEN_PARAM, &VDHANDLE ) != ERROR_SUCCESS )
{
return ERR_MOUNT_SCRIPTCREATE;
}
// attach drive
if ( AttachVirtualDisk( VDHANDLE, 0, ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME,
0, &VHD_ATTACH_PARAM, 0 ) != ERROR_SUCCESS )
{
return ERR_MOUNT_SCRIPTEXECUTE;
}
// Get attached drive & info
wchar_t DriveInfo[ MAX_PATH ];
ULONG bufferSize = sizeof( DriveInfo );
GetVirtualDiskPhysicalPath( VDHANDLE, &bufferSize, DriveInfo );
// DriveInfo raw output = \PHYSICALDISKX
// X = volume id
我尝试了什么
std::wstringstream tmp;
int value;
char c;
std::wstringstream ss( DriveInfo );
ss >> tmp >> c >> value;
问题
没有运算符“>>”匹配这些操作数
问题
- 如何从
wchar_t DriveInfo中提取卷ID? - 除了
GetVirtualDiskPhysicalPath,还有什么方法可以获取volume id吗?
【问题讨论】:
-
通常,物理驱动器对象没有卷 ID - 只有该驱动器上的各个分区有。我认为安装的.vhd 通常也是如此。 (但我不确定您安装 ISO 的情况。)
标签: c++ winapi visual-c++ disk