Хочу сделать как WinHex. Определить физические, логические диски (виртуальные (BesCrypt, Алкоголь), если в DVD всунут диск, с флешек). А потом получить указатель на данные диска для дальнейшего манипулирования с ними. Помогите пожалуйста куда копать. Гугл меня не понимает, фигню ищет ))
QueryDosDevices - получил буквочки дисков, GetDriveType по каждой буквочке - получил тип устройства, ну и IOCTL_DISK(STORAGE)_GET_DRIVE_GEOMERTY + IOCTL_STORAGE_QUERY_DEVICE_PROPERTY зашлифовал. Ключевые слова я те написАл, дальше сам!
CreateFile \\.\PhisicalDriveX где Х число и вперед, анализируешь таблицу партишенов и выясняешь что где
а ты в WinHEX имена посмотри (у флешек и у ) и увидишь, что имена у них такие же! ЗЫ: А веник тоже через CreateFile можно открыть? а комнату убрать заставить?
Забудь про буквы \\.\C и т.д. забудь про \\.\PhisicalDriveX. Можно проще сделать. тот же винхекс с другого начинается осмотр.
serega28 что ты имеешь ввиду. он как раз так и обращается - посмотри filemon, или выкладывай полностью свою точку зрения! а то мы мысли читать не умеем (пока).
Сначала мы собираем вроде бы через FindFirstVolume и GetVolumeInformaton. ну и тут потом видимо можно узнать к какому уже физическому устройству относятся найденные тома, дальше я должен получить указатель на начало данных на диске (нулевой сектор поидее), а потом я уже сам с помощью своих функций работаю с файловой системой. Вот что я имею и хочу ввести )). только в самом начале я застрял.
кул. чтобы под винду получить доступ к RAW данным диска 1 - его нужно открыть! (дальше сам догадаешься?)
Короче идёшь на http://t13.org через драйвер лезешь к I/O портам и вперёд, ATA команды имхо рулят, ещё можно http://t10.org/ глянуть.
Физические диски можно определить через SetupAPI. Документация есть так, что если захочешь -- разберешся
GetLogicalDrives возращает список всех логических дисков. GetDriveType позволят узнать тип конкретного логического диска.
Без работы с физическими портами твое поделие (например, защита) будет обходиться на раз. А при работе с портами тебе придется придется писать драйвера под флешки, как ты правильно догадываешься. Накопители USB, Ethernet, Firewire и т.п.
Как вариант: перечислять через native api. Открываешь \Global?? (ZwOpenDirectoryObject), перечисляешь там объекты (ZwQueryDirectoryObject), ищешь там символьные ссылки вида X:, резолвишь их (ZwQuerySymbolicLinkObject) и смотришь куда они указывают. Потом тоже самое для \Sessions\X\DosDevices\Y (там найдешь локальные для юзера ссылки типа сетевых дисков). Дальше смотришь что напарсил. \Device\HarddiskVolumeX - раздел винта. и так далее.