доступ к физическим устройствам
считать все данные в образ, или записать из образа на устройство (FDD,CD,HDD,Flash,MO)
Есть функция в WinAPI - createfile ей в параметре надо передать имя устройства
проблема:
как из логической буквы диска получить это имя устройства к которому оно привязано, т.е. пользователь выбирает букву диска например С, а мне нужно вычислить или получить имя устройства
пытались сделать через реестр, но у разных Windows NT4,2000,XP он отличается.
Как выйти из создавшегося положения?
Ещё, параметр функции CreateFile для открытия физического дискового устройства выглядит "\\.\PHYSICALDRIVEx", где x - 0,1 и т.д.
Открытие логического диска - параметр "\\.\x:", где x - буква диска.
Кажется, так.:)
Первое, что приходит на ум - функции GetLogicalDriveStrings, GetVolumeInformation.
Ещё, параметр функции CreateFile для открытия физического дискового устройства выглядит "\\.\PHYSICALDRIVEx", где x - 0,1 и т.д.
Открытие логического диска - параметр "\\.\x:", где x - буква диска.
Кажется, так.:)
Это да. Спасибо за ответ, но это не доступ к физическому устройству "логического диска - параметр "\\.\x:"," !!!!!!
Нужно именно физически (т.е. читать (записывать) надо именно ВСЕ данные с устройства)
Использовать "\\.\PHYSICALDRIVEx" тоже пока возможности НЕТ. Проблема собственно: как прейти от c: к "\\.\PHYSICALDRIVEx" или к "\\\\? \\IDE#DiskST380011A_______________________________
3. 04____#4a35355633524444202020202020202020202020#{5
3f56307-b6bf-11d0-94f2-00a0c91efb8b}"?
вариант
точно рабротает - проверял и читает то что надо!
А не поможет ли здесь QueryDosDevice?
В виндах есть утилита mountvol кажись, при помощи ее можно посмотреть именно эти имена (физические). Отсюда вывод - поищи ее описание у мелкомягких (какими функциями пользуется и т.д.), по идее там должно быть.
Все просто:
HANDLE hDisk;
hDisk = CreateFile ("\\\\.\\C:", GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
VOLUME_DISK_EXTENTS vde;
if(DeviceIoControl (hDisk, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,
NULL, 0, &vde,
sizeof(vde), &dwNotUsed, NULL))
sprintf(HddName, "\\\\.\\PHYSICALDRIVE%d", vde.Extents->DiskNumber);
CloseHandle (hDisk);
}
Далее CreateFile(HddName);
Смотри MSDN: IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
Использовать "\\.\PHYSICALDRIVEx" тоже пока возможности НЕТ. Проблема собственно: как прейти от c: к "\\.\PHYSICALDRIVEx" или к "\\\\?
Все просто:
HANDLE hDisk;
hDisk = CreateFile ("\\\\.\\C:", GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
VOLUME_DISK_EXTENTS vde;
if(DeviceIoControl (hDisk, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,
NULL, 0, &vde,
sizeof(vde), &dwNotUsed, NULL))
sprintf(HddName, "\\\\.\\PHYSICALDRIVE%d", vde.Extents->DiskNumber);
CloseHandle (hDisk);
}
Далее CreateFile(HddName);
Смотри MSDN: IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
И при этом я смогу иметь доступ к MBR, Таблице разделов и другим частям кпримеру жесткого или магнитооптики или флэшки?
И при этом я смогу иметь доступ к MBR, Таблице разделов и другим частям кпримеру жесткого или магнитооптики или флэшки?
А есть другие способы доступа?
Как при этом способе добраться до ДИСКОВОДА?
А до флэшки и магнитооптики (МО)?