Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

доступ к физическим устройствам

384
17 ноября 2004 года
mikeshilkin
95 / / 20.04.2000
задача:
считать все данные в образ, или записать из образа на устройство (FDD,CD,HDD,Flash,MO)

Есть функция в WinAPI - createfile ей в параметре надо передать имя устройства
Цитата:
CreateFile("\\\\?\\IDE#DiskST380011A_______________________________3.04____#4a35355633524444202020202020202020202020#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}",GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);




проблема:
как из логической буквы диска получить это имя устройства к которому оно привязано, т.е. пользователь выбирает букву диска например С, а мне нужно вычислить или получить имя устройства

Цитата:
\\\\?\\IDE#DiskST380011A_______________________________3.04____#4a35355633524444202020202020202020202020#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}



пытались сделать через реестр, но у разных Windows NT4,2000,XP он отличается.

Как выйти из создавшегося положения?

310
17 ноября 2004 года
fellow
853 / / 17.03.2003
Первое, что приходит на ум - функции GetLogicalDriveStrings, GetVolumeInformation.

Ещё, параметр функции CreateFile для открытия физического дискового устройства выглядит "\\.\PHYSICALDRIVEx", где x - 0,1 и т.д.

Открытие логического диска - параметр "\\.\x:", где x - буква диска.

Кажется, так.:)
384
17 ноября 2004 года
mikeshilkin
95 / / 20.04.2000
Цитата:
Originally posted by fellow
Первое, что приходит на ум - функции GetLogicalDriveStrings, GetVolumeInformation.

Ещё, параметр функции CreateFile для открытия физического дискового устройства выглядит "\\.\PHYSICALDRIVEx", где x - 0,1 и т.д.

Открытие логического диска - параметр "\\.\x:", где x - буква диска.

Кажется, так.:)


Это да. Спасибо за ответ, но это не доступ к физическому устройству "логического диска - параметр "\\.\x:"," !!!!!!

Нужно именно физически (т.е. читать (записывать) надо именно ВСЕ данные с устройства)

Использовать "\\.\PHYSICALDRIVEx" тоже пока возможности НЕТ. Проблема собственно: как прейти от c: к "\\.\PHYSICALDRIVEx" или к "\\\\? \\IDE#DiskST380011A_______________________________
3. 04____#4a35355633524444202020202020202020202020#{5
3f56307-b6bf-11d0-94f2-00a0c91efb8b}"?

вариант

Цитата:
CreateFile("\\\\? \\IDE#DiskST380011A_______________________________ 3. 04____#4a35355633524444202020202020202020202020#{5 3f56307-b6bf-11d0-94f2-00a0c91efb8b}" ,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NUL L, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL)

точно рабротает - проверял и читает то что надо!

310
17 ноября 2004 года
fellow
853 / / 17.03.2003
А не поможет ли здесь QueryDosDevice?
243
18 ноября 2004 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by fellow
А не поможет ли здесь QueryDosDevice?


В виндах есть утилита mountvol кажись, при помощи ее можно посмотреть именно эти имена (физические). Отсюда вывод - поищи ее описание у мелкомягких (какими функциями пользуется и т.д.), по идее там должно быть.

9.3K
19 ноября 2004 года
Henhema
1 / / 19.11.2004
Использовать "\\.\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
384
20 ноября 2004 года
mikeshilkin
95 / / 20.04.2000
Цитата:
Originally posted by Henhema
Использовать "\\.\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, Таблице разделов и другим частям кпримеру жесткого или магнитооптики или флэшки?

384
23 ноября 2004 года
mikeshilkin
95 / / 20.04.2000
Цитата:
Originally posted by mikeshilkin


И при этом я смогу иметь доступ к MBR, Таблице разделов и другим частям кпримеру жесткого или магнитооптики или флэшки?



А есть другие способы доступа?
Как при этом способе добраться до ДИСКОВОДА?
А до флэшки и магнитооптики (МО)?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог