Ответы:
Вы можете получить номер устройства и номер раздела, используя IOCTL_STORAGE_GET_DEVICE_NUMBER:
HANDLE h = ::CreateFile(L"\\\\.\\d:", 0, 0, NULL, OPEN_EXISTING, 0, NULL);
STORAGE_DEVICE_NUMBER info = {};
DWORD bytesReturned = 0;
::DeviceIoControl(h, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0, &info, sizeof(info), &bytesReturned, NULL);
Но учтите, что логический том может находиться на нескольких физических дисках.
Мне просто пришлось исправить boot.ini, когда он не мог загрузить установку WinXP - после создания новых первичных разделов на его диске.
Оказывается, WinXP был расположен в логическом томе, и загрузчик NT сначала назначает номер первичным разделам, а затем логическим томам (возможно, по порядку секторов в обоих случаях), таким образом, создавая новые первичные разделы (даже в конце диска) Номер раздела WinXP изменен.
Что касается номера диска, я не знаю точно, но я ожидаю, что он будет еще более неясным. Кажется, я вспоминаю, что контроллеры SATA нумеруются до PATA, я представляю их по порядку разъема (и состоянию основного устройства для дисков PATA), но не цитируйте меня по этому поводу.