Здравствуйте. Пишу драйвер для работы с диском. Чтение/запись реализованы и работают. Есть проблемы при записи в FAT на FAT-томах. Сама запись проходит нормально. Но изменения затираются FASTFAT драйвером, когда он что-нибудь пишет на том. Вопрос: Как заставить FASTFAT драйвер обновить свои внутренние структуры/кеш? Ps. Для открытия устройства используется ZwCreateFile с флажками 'FILE_READ_DATA|FILE_WRITE_DATA'. Пробовал отправлять IRP_MJ_FLUSH_BUFFERS, вызывал CcFlushCache. Для записи вызывал ZwWriteFile, а также вручную посылал IRP_MJ_WRITE. Pps. Если систему перегрузить до того, как FASTFAT что-нибудь запишет, то после перезагрузки FASTFAT признаёт изменения и не затирает их.
хм... а если попробовать поставить хуки на atapi и попробовать отслеживать источник изменений на диске, соответственно исправляя данные в нужном месте на "то что надо"? т.е. смысл каков - 1. пишем на диск свои данные. Запоминаем что и где меняли (заносим сведения в протокол) 2. при записи на диск в указанное место - если это не наш вызов - подменяем данные. 3. при чтении из указанного места, удаляем сведения из протокола. правда есть мнение, что такое решение может оказаться весьма кривым ибо чревато долгосрочной рассинхронизацией данных драйвера ФС и фактическими данными на диске. Хотя с другой стороны есть некое интуитивное предположение, что впринципе, если запись будет идти в служебные области Фс то это может быть скорее всего именно флуш кеша, иначе б зачем? Когда-то была подобная потребность у меня в подобных действиях, но в моем случае можно было просто через диспетчер устройств отключить диск. А так, до этого - уж как и не пробовал - познаний видимо маловато было ... чаще всего удавалось достичь когерентности - когда "насиловал" диск случайным доступом, тем самым очищая кеш... но это крайне ненадежно работало. Вообще, - если найдешь решение - отпишись плиз!