Получить номер тома или номер физического диска с которого загружена ОС

Тема в разделе "WASM.WIN32", создана пользователем somebodynew, 18 май 2018 в 16:25.

  1. somebodynew

    somebodynew New Member

    Публикаций:
    0
    Регистрация:
    Пятница
    Сообщения:
    3
    Вообщем, проблема вроде не новая, но почему то не нашёл внятного решения.
    Суть такая - я хочу получить имя типа HardDiskVolumeXXX и/или PhysicalDriveXXX.
    Вопрос первый - правда ли то, что PhysicalDrive0 будет указывать всегда именно на хард с текущей осью на всей линейке 7-10 или нет ? Ни доказательства, ни опровержения не нашёл. А если нет, то как получить ?
    Вопрос второй - как узнать номер тома на котором стоит текущая ось ? Пока ничего не пришло в голову кроме как GetWindowsSystemDirectory + CreateFile + NtQueryObject (что бы в NT путь по человечески перевести). (или еще более извращенский NtQuerySystemInformation(SystemProcessInformation) + пройтись до первого системного процесса и NtQueryInformationProcess(ProcessImageFilename) Но это всё не то, может быть есть более разумный метод ?
     
  2. hapr

    hapr Member

    Публикаций:
    0
    Регистрация:
    9 мар 2009
    Сообщения:
    33
    Нужно использовать связку GetSystemDirectory с QueryDosDevice .
     
    drem1lin и somebodynew нравится это.
  3. somebodynew

    somebodynew New Member

    Публикаций:
    0
    Регистрация:
    Пятница
    Сообщения:
    3
    Хорошая идея, остается вопрос с
     
  4. hapr

    hapr Member

    Публикаций:
    0
    Регистрация:
    9 мар 2009
    Сообщения:
    33
    К сожалению записей про PhysicalDrive0 я негде не видел. Но если основаться на моем наблюдении то номер диска в PhysicalDriveX зависит от того куда он физически "воткнут" . По другому говоря если "воткнуть" один винчестер в SATA1 а второй в SATA 3 , а потом обменять их местами то и ихнее номера в PhysicalDriveX изменяться.

    А найти PhysicalDriveX : Createfile + DeviceIoControl + IOCTL_STORAGE_GET_DEVICE_NUMBER
     
  5. somebodynew

    somebodynew New Member

    Публикаций:
    0
    Регистрация:
    Пятница
    Сообщения:
    3
    В том то и дело, что в моем тесте, он как был нулевым, так и остался (win7).
    Ну и ладно. Нет же никакой разницы, к какому объекту я сделаю IOCTL_STORAGE_QUERY_PROPERTY, будь то PhysicalDrive, будь то HardDiskVolume ?