Re: Как сопоставить логические диски физическому?
От: maks__  
Дата: 13.06.09 19:37
Оценка: 1 (1)
B>Имею список имен дисковых устройств.
B>Необходимо определить имена логических дисков (томов) принадлежащих физическому диску.
int LogicalDiskToPhysDisk(LPCTSTR pszName)
{
    if(!(pszName && pszName[1]==':' && pszName[2]==0)) return -1;

    //вместо GENERIC_READ|GENERIC_WRITE передавать 0, чтобы работало не только под администратором
    CHandle hDisk(CreateFile(CString("\\\\.\\") + pszName, 0, FILE_SHARE_DELETE|FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL));
    RETURN_IF_NOT(FileOK(hDisk), -1);

    BYTE buf[1024] = {0};
    DWORD BytesReturned = 0;
    BOOL bResult = DeviceIoControl(hDisk, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS , NULL, 0, &buf, sizeof(buf), &BytesReturned, NULL);
    if(!bResult)
        return -1;//"\Device\WMDisk0" - виртуальный диск

    VOLUME_DISK_EXTENTS* pExt = (VOLUME_DISK_EXTENTS*)buf;
    RETURN_IF_NOT(pExt->NumberOfDiskExtents>=1, -1);

    return pExt->Extents[0].DiskNumber;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.