Лирическое вступление:
Я монтирую файловую систему, как букву диска (Просто указывая SymbolicLink, как '\DosDevices\X:'). FS получает данные из сервиса (списки файлов и их содержимое). Для начала я писал FS без поддержки Cache и Memory менеджеров (FileObject->FsContext = NULL), отладил работу — всё работает, как часы(кроме, естественно, блокнота и MemoryMapped Files). Проблемы начались после того, как я начал писать поддержку Cache и Memory менеджеров. Всё, как написано в "библии".
Что получается:
1 при открытии файла блокнотом, выдаётся сообщение, что "Файл слишком велик"
2 при чтении Far'ом вызывается кэшируемое чтение, т.к. данных ещё в кэше нет, то вызывается обычное чтение. После завершения этих вызовов (буфер заполняется правильно — в SoftIce смотрел), вылезает exception Page Fault (только если SoftIce запущен, инече всё проходит тихо). После чего FAR виснет намертво. Следующих вызовов функций нет.
Пытался вручную забивать значения для структур VCB и VPB (они у меня статические: одна буква диска, значит одна структура каждого типа) и подставлять ссылки на них в нужных местах — ничего не меняется.
структура FCB состоит из NtRequiredFCB + SectionObjectPointers + остальное (именно в такой последовательности).
Буду оччень раз услышать советы, как обмануть систему и заставить работать нормально Cache и Memory managers.