2,640
社区成员
发帖
与我相关
我的任务
分享
VolumeName=\\?\Volume{4b82a9cd-f62c-4e78-8117-0682014b76b1}\
strNewVolumeName: Volume{4b82a9cd-f62c-4e78-8117-0682014b76b1}
---Found a device: \Device\HarddiskVolume4
---Volume name: \\?\Volume{4b82a9cd-f62c-4e78-8117-0682014b76b1}\
---Volume Path: C:\
---
---Next----: \\?\Volume{e6a20ef8-8568-44c8-9884-85529888078c}\
VolumeName=\\?\Volume{e6a20ef8-8568-44c8-9884-85529888078c}\
strNewVolumeName: Volume{e6a20ef8-8568-44c8-9884-85529888078c}
---Found a device: \Device\HarddiskVolume5
---Volume name: \\?\Volume{e6a20ef8-8568-44c8-9884-85529888078c}\
---Volume Path: D:\
---
---Next----: \\?\Volume{9c891708-4505-4306-997b-9187a0eefeca}\
VolumeName=\\?\Volume{9c891708-4505-4306-997b-9187a0eefeca}\
strNewVolumeName: Volume{9c891708-4505-4306-997b-9187a0eefeca}
---Found a device: \Device\HarddiskVolume6
---Volume name: \\?\Volume{9c891708-4505-4306-997b-9187a0eefeca}\
---Volume Path: E:\
---
---Next----: \\?\Volume{06425352-b0da-4862-b565-f09c46b4496d}\
VolumeName=\\?\Volume{06425352-b0da-4862-b565-f09c46b4496d}\
strNewVolumeName: Volume{06425352-b0da-4862-b565-f09c46b4496d}
---Found a device: \Device\HarddiskVolume1
---Volume name: \\?\Volume{06425352-b0da-4862-b565-f09c46b4496d}\
---Volume Path:
---
---Next----: \\?\Volume{31bf2ce1-8982-4652-96bc-a641d0f78dfd}\
VolumeName=\\?\Volume{31bf2ce1-8982-4652-96bc-a641d0f78dfd}\
strNewVolumeName: Volume{31bf2ce1-8982-4652-96bc-a641d0f78dfd}
---Found a device: \Device\HarddiskVolume7
---Volume name: \\?\Volume{31bf2ce1-8982-4652-96bc-a641d0f78dfd}\
---Volume Path:
---
NO MORE FILES! END ! Error code : 18
缺少 \Device\HarddiskVolume2 -》 EPS 分区
缺少 \Device\HarddiskVolume3-》 MSR 分区
BOOL CMyDriveListBox::initVolumes()
{
HANDLE FindHandle = INVALID_HANDLE_VALUE;
DWORD Error = ERROR_SUCCESS;
DWORD CharCount = 0;
BOOL Success = true;
ES_VOLUME_INFO VolumeInfo;
CString VolumeName =_T("");
FindHandle = FindFirstVolume((LPTSTR)VolumeName.GetBuffer(MAX_PATH), MAX_PATH);
if (FindHandle == INVALID_HANDLE_VALUE)
{
TRACE1("FindFirstVolume failed with error code %d\n", GetLastError());
return false ;
}
while ( Success )
{
this->ClearVolumeInfo(&VolumeInfo);
TRACE1("VolumeName=%s\n", VolumeName); /* \\?\Volume{4b82a9cd-f62c-4e78-8117-0682014b76b1}\ */
VolumeName.Format(_T("%s"), VolumeName);
int lvo = VolumeName.GetLength();
// TRACE1("path.Right(1): %s\n", VolumeName.Right(1));
if (
(VolumeName.Mid(0,4)).Compare(_T("\\\\?\\")) !=0
|| (VolumeName.Right(1)).Compare(_T("\\")) !=0
)
{
TRACE1("FindFirstVolume/FindNextVolume returned a bad path: %s\n", VolumeName);
//return false ;
break;
}
CString DeviceName =_T("");
CString strNewVolumeName =_T("");
strNewVolumeName = VolumeName.Mid(4,lvo-5);
TRACE1("strNewVolumeName: %s\n", strNewVolumeName);
CharCount =
QueryDosDevice( strNewVolumeName, (LPTSTR) DeviceName.GetBuffer(MAX_PATH), MAX_PATH);
if ( CharCount == 0 )
{
TRACE1("QueryDosDeviceW failed with error code %d\n", GetLastError());
//return false ;
break;
}
TRACE1("\n---Found a device: %s \n", DeviceName);
TRACE1("---Volume name: %s \n", VolumeName);
VolumeInfo.VolumeName = VolumeName; //{GUID}
VolumeInfo.DosDeviceName= DeviceName;
//
DWORD dwReturn = 0 ;
CString strPath= _T("");
BOOL bOK = GetVolumePathNamesForVolumeName(VolumeName, (LPTSTR)strPath.GetBuffer(MAX_PATH), MAX_PATH, &dwReturn);
if (bOK)
{
strPath.Format(_T("%s"), strPath);
TRACE1("---Volume Path: %s \n", strPath);
(VolumeInfo.Path).Format(_T("%s"),strPath);
}
TRACE0("---\n");
m_volue_infos.Add(VolumeInfo);
//
// Move on to the next volume.
Success = FindNextVolume(FindHandle, (LPTSTR)VolumeName.GetBuffer(MAX_PATH), MAX_PATH);
if ( !Success )
{
Error = GetLastError();
if (Error != ERROR_NO_MORE_FILES)
{
TRACE1("FindNextVolumeW failed with error code %d\n", Error);
break;
}
else
{
Error = ERROR_SUCCESS; //是没有下一个了 //ERROR_NO_MORE_FILES
TRACE1("NO MORE FILES! END ! Error code : %d\n\n", ERROR_NO_MORE_FILES);
break;
}
}
TRACE1("\n---Next----: %s\n", VolumeName);
}
FindVolumeClose(FindHandle);
FindHandle = INVALID_HANDLE_VALUE;
return true;
}
其中结构体定义
typedef struct _STRUCT_VOLUME_INFO
{
CString VolumeName ; /* \\?\Volume{77aaa0d9-1b5d-11e6-9bc7-0015830cbfeb}\ */
CString DosDeviceName ; // \Device\HarddiskVolume8
CString Path ; // c:\ D:\
CString lable ; // 可能存在的卷标。
CString FileType ; // NTFS ? FAT32? 。
} ES_VOLUME_INFO;
。。。。
CArray < ES_VOLUME_INFO, ES_VOLUME_INFO> m_volue_infos ;