Я создаю виртуальный диск, обрабатываю следующие IOCTL - case IOCTL_DISK_CHECK_VERIFY: case IOCTL_CDROM_CHECK_VERIFY: case IOCTL_STORAGE_CHECK_VERIFY: case IOCTL_STORAGE_CHECK_VERIFY2: case IOCTL_DISK_GET_DRIVE_GEOMETRY: case IOCTL_CDROM_GET_DRIVE_GEOMETRY: case IOCTL_DISK_GET_LENGTH_INFO: case IOCTL_DISK_GET_PARTITION_INFO: case IOCTL_DISK_GET_PARTITION_INFO_EX: case IOCTL_DISK_IS_WRITABLE: case IOCTL_DISK_MEDIA_REMOVAL: case IOCTL_STORAGE_MEDIA_REMOVAL: case IOCTL_CDROM_READ_TOC: case IOCTL_DISK_SET_PARTITION_INFO: case IOCTL_DISK_VERIFY: Это работает под w2k, если диск уже отформатирован. Если же нет - при попытке форматировать, в стандартном диалоге форматирования пишет "Unknown capacity". Подозреваю, что это из-за отсутствия IOCTL_DISK_GET_LENGTH_INFO на w2k. (MSDN say: This IOCTL is supported in Windows XP, Windows Server 2003 and later operating systems. ) Далее, из неизвестных мне IRP - LogicIrpDispatcher::dispatch Unknown IOCTL code = 0x30000 LogicIrpDispatcher::dispatch Unknown IOCTL code = 0x0 оба с нулевыми буферами, и размерами этих буферов... Вопрос, может кто в курсе, что нужно хендлить на w2k, чтобы она узнала так нужную ей емкость?
IOCTL_DISK_GET_DRIVE_LAYOUT ни при чем, думается... В общем то драйвер - аналог filedisk. Сегодня проверил - filedisk ведет себя точно так же. Пишем - FileDisk.exe /mount 0 c:\img 100M x: появляется диск, пытаемся форматировать - в поле "Capacity" пишет "Unknown capacity". Завершить форматирование после этого не получается... Есть какие то идеи?
1. Ты не думай- ты делай. 2. FileDisk- не самый лучший пример для подражания. Лучше посмотри реализацию TrueCrypt- там она получше будет (хотя и не без косяков, конечно).
блин, IOCTL_DISK_GET_DRIVE_LAYOUT возвращает информацию о партициях, а у меня их там там нет, я же пытаюсь отформатировать раздел.
genesis почитай свой пост, ты говоришь что форматируешь раздел, и то что на твоем диске нет разделов. Где логика?
Логика вот : я создаю файл, он сразу после создания очевидно никаких разделов не содержит. После этого создаю устройство, для этого устройства обрабатываю IRP_MJ_READ && IRP_MJ_WRITE + указанные выше IOCTL коды. Потом делаю на это устройство DefineDosDevice, и связываю его с буквой. Потом пытаюсь его отформатировать. Все. Подскажите, что я должен ответить на IOCTL_DISK_GET_DRIVE_LAYOUT? что-то вроде, "есть один раздел, и он такой то, начинается там-то" ???