Драйвер для прямой записи на диск - очистка кеша файловой си
От: vasalvit  
Дата: 09.04.09 14:16
Оценка:
Здравствуйте.

Пишу драйвер для работы с диском. Чтение/запись реализованы и работают.

Есть проблемы при записи в FAT на FAT-томах. Сама запись проходит нормально. Но изменения затираются FASTFAT драйвером, когда он что-нибудь пишет на том.

Вопрос: Как заставить FASTFAT драйвер обновить свои внутренние структуры/кеш?

Ps. Для открытия устройства используется ZwCreateFile с флажками 'FILE_READ_DATA|FILE_WRITE_DATA'.
Пробовал отправлять IRP_MJ_FLUSH_BUFFERS, вызывал CcFlushCache. Для записи вызывал ZwWriteFile, а также вручную посылал IRP_MJ_WRITE.

Pps. Если систему перегрузить до того, как FASTFAT что-нибудь запишет, то после перезагрузки FASTFAT признаёт изменения и не затирает их.
прямая запись на диск
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 09.04.09 15:41
Оценка: +2
Здравствуйте, vasalvit, Вы писали:

V>Есть проблемы при записи в FAT на FAT-томах. Сама запись проходит нормально. Но изменения затираются FASTFAT драйвером, когда он что-нибудь пишет на том.

а чего Вы хотели?

если Вы из своего драйвера пишите напрямую на диск, прокидывая всех остальных в файловом стеке (как минимум), а то еще и в storage (там тоже фильтры живут, и много). Там же не телепаты.

If your application or driver writes directly to a volume that has a file system mounted on it, without first obtaining exclusive access to it, you could cause corruption or system instability, or both. This is because those writes might collide with other changes coming from the file system and leave the contents of the volume or file system, or both in an inconsistent state.


нужно же "работать в команде"

V>Вопрос: Как заставить FASTFAT драйвер обновить свои внутренние структуры/кеш?

Может сначала отмонтировать FS и работать с raw диском? Или залочить\получить эксклюзивный доступ к тому.
Или хотя бы лок на сектора наложить (т.е. дать знать FS что у Вас есть опр. планы) перед изменением.

Короче посмотрите про DASD (Direct Access to Storage Device), см Q100027 ?
сразу говорю, есть нововведения на Висте и выше, см Q942448.

Это пойдет сквозь FS и будет учтено по возможности всеми, кто в файловом стеке и дальше.
Плюс не будет такой явной дыры в безопасности.
--
Напишите лучше что именно на диске и в каком месте модифицируете.
Зачем и почему надо именно напрямую. Что хочется вообще.
И какому устройству (откуда берет) Ваш драйвер запросы шлет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1144>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re: прямая запись на диск
От: codegrinder  
Дата: 13.04.09 18:47
Оценка:
Здравствуйте.

У меня совершенно аналогичный вопрос, задача такая: требуется чтобы дефрагментатор перемещал файлы которые не умеет перемещать родной драйвер ФС. Т.е. первые кластера папок на FAT, pagefile на NTFS и т.п. Решение насколько понимаю — драйвер-фильтр ФС причём upper. И вопрос тот же самый — как заставить родной драйвер ФС заметить изменения при записи. С драйверами опыта немного, написал только перехват запуска приложений.

VAB>Напишите лучше что именно на диске и в каком месте модифицируете.

VAB>Зачем и почему надо именно напрямую. Что хочется вообще.
VAB>И какому устройству (откуда берет) Ваш драйвер запросы шлет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.