Здравствуйте, LimyKurn, Вы писали:
LK>Спасибо за verifier, а вот по синхронизации надо либо что-то делать, либо все-таки счесть данную архитектуру чем-то ужасным
Если задача заключается в том, чтобы собирать какие-то данные на post operation callback и записывать в файл,
то вряд ли есть что-то лучше, чем отдельный поток, который это делает. Не вижу резона гонять эти данные в user mode и
писать в файл оттуда, это никаких выгод не даст, получится только лишнее усложнение на ровном месте.
Очередь можно сделать на базе linked list и засинхронизировать доступ к ней, как я уже писал, через спинлоки.
Рабочий поток будет ждать (KeWaitForXxx) на событии и при его сигналинге выгребать данные из очереди и сбрасывать их на диск.
То же самое делать можно и по таймауту (например, когда KeWaitForXxx вернула STATUS_TIMEOUT).
LK>А если перенести логирование в минифильтры, то это гемор поменьше, но придется его оптимизировать по быстродействию, что ли, к тому же логирование создает файл — от рекурсии защищаться придется).
Там рекурсии неоткуда возникнуть.
LK>Но и спинлоки как вариант "что-то делать" — не нравятся.