Доброе время суток, многоуважаемые знатоки =) Помогите разобраться с рекогнайзером. Драйвер регится как файловая система, создает объект устройства, в реесте есть записи, даже драйвер стартует. Но IRP_MJ_FILE_SYSTEM_CONTROL не получает. при этом созданная файловая система для тестов определяется как Raw. Где могут быть камни?
А зачем тебе вообще мини-драйвер нужен? Раньше оно использовалось, по сути, только для экономии ресурсов (память, в основном), но нужно ли это в современных условиях? Хотя не знаю, если ты собрался запускать это всё на каких-нибудь военных машинках, то да, там особо не разбежишься, наверное. Здесь что имеется в виду, - IoRegistertFileSystem() или что? Не понял, регистрация мини-драйвера выполняется до создания FSDO? Что за ересь ещё? Или я не так понял? И какого типа устройство создаёшь? Должно быть что-то вроде FILE_DEVICE_DISK_FILE_SYSTEM. Может быть, это потому, что другой (мини-)драйвер распознал том раньше, не? Что значит "файловая система определяется"? Кем определяется? Каким образом? Как вообще том создаётся? Это какое-то твоё виртуальное устройство или ты на реальный диск записал свои какие-то структуры?
Да, все верно. Конечно нет, вначале создается устройство. иначе никак. ибо IoRegisterFileSystem требует как раз его. Да, тип именно такой. а разве мини-драйвер - это не рекогнайзер? в вмвере диск. записал свои структуры. _FILE_SYSTEM_RECOGNITION_STRUCTURE Винда грит, что на томе raw, насколько я понимаю, значит винда не распознала файловую систему. Поэтому у меня и вопрос. вроде как по идеи io man должен был послать irp_mj_file_system_control драйверам, которые добавили себя в глобальную очередь файловых систем, но мой драйвер его не получает.
Это одно и то же, просто лично я предпочитаю использовать более устоявшиеся термины в русском языке, вместо того, чтобы тупо писать русскими буквами английские транскрипции. Похоже, что так. Да, но не сразу после регистрации (см. ниже). А ты пробовал явно вызвать, скажем, ZwCreateFile(), на твоём томе (например, \Device\HarddiskVolume2 или \??\D: или как там он у тебя называется)? Дело в том, что процесс распознавания и монтирования тома начинается только тогда, когда какой-либо поток пытается открыть том для чтения/записи данных (т.е. доступ нужно указывать как минимум FILE_READ_DATA, иначе монтирование запущено не будет).