поток на PASSIVE, и синхронизация эвентом (к shared ring buffer логгера) DPC и потока на PASSIVE, я уже раза 3 видел что так действительно делают.
maaaad
Thanks, может так и сделаю, а ещё попробую IoQueueWorkItem. Я так понял, что этой функцией можно поставить в очередь процедуры, которые нужно выполнить в PASSIVE_LEVEL. Получается что-то на подобие DPC. Поскольку Callback routine будет вызвана в отдельном системном контексте, MSDN пишет: "Drivers must not permanently reserve a work item for the driver’s use. Work items are designed for operations that complete quickly". Ну если quickly тогда я предполагаю, что вызывать ZwWriteFile нужно асинхронно.
Но вот интересно как ZwWriteFile работает,
если:
1. копирует мой буфер в свой
2. возвращает мне управление
3. сохраняет свой буфер в файл.
Вот так вроде бы и нормально.
Но не может ли быть, что она:
1. берет указатель на мой буфер
2. возвращает мне управление
3. сохраняет мой буфер в файл.
При таком раскладе асинхронное сохранение может породить множество проблем.
Кто знает каким способом работает ZwWriteFile в асинхронном режиме?