Вообщем, проблема вроде не новая, но почему то не нашёл внятного решения. Суть такая - я хочу получить имя типа HardDiskVolumeXXX и/или PhysicalDriveXXX. Вопрос первый - правда ли то, что PhysicalDrive0 будет указывать всегда именно на хард с текущей осью на всей линейке 7-10 или нет ? Ни доказательства, ни опровержения не нашёл. А если нет, то как получить ? Вопрос второй - как узнать номер тома на котором стоит текущая ось ? Пока ничего не пришло в голову кроме как GetWindowsSystemDirectory + CreateFile + NtQueryObject (что бы в NT путь по человечески перевести). (или еще более извращенский NtQuerySystemInformation(SystemProcessInformation) + пройтись до первого системного процесса и NtQueryInformationProcess(ProcessImageFilename) Но это всё не то, может быть есть более разумный метод ?
К сожалению записей про PhysicalDrive0 я негде не видел. Но если основаться на моем наблюдении то номер диска в PhysicalDriveX зависит от того куда он физически "воткнут" . По другому говоря если "воткнуть" один винчестер в SATA1 а второй в SATA 3 , а потом обменять их местами то и ихнее номера в PhysicalDriveX изменяться. А найти PhysicalDriveX : Createfile + DeviceIoControl + IOCTL_STORAGE_GET_DEVICE_NUMBER
В том то и дело, что в моем тесте, он как был нулевым, так и остался (win7). Ну и ладно. Нет же никакой разницы, к какому объекту я сделаю IOCTL_STORAGE_QUERY_PROPERTY, будь то PhysicalDrive, будь то HardDiskVolume ?