Пишу фильтр файловой системы, использую cancel safe queues.
Идея в том, чтобы все irp_mj_create запросы ставить в очередь с целью их
последующей обработки и не блокировать функцию-диспатчер.
Все остальные запросы передаются вниз по стеку сразу же, без задержки.
При постановке запроса в очередь я делаю следующее:
Irp = IoCsqRemoveNextIrp(&Pdx->CancelSafeQueue, NULL);
if (!Irp)
{
continue;
}
IoSkipCurrentIrpStackLocation(Irp);
IoCallDriver(Pdx->AttachedToDeviceObject, Irp);
Проблемма в том, что при работе, как только како-либо процесс пытается открыть файл
(мой фильтр получает запрос create), он блокируется. То есть процесс вроде как не получает
результата обработки запроса и впадает в бесконечное ожидание.
Я только начал заниматься разработкой драйверов, может не достаточно ясно изложил ситуацию.
Надеюсь на вашу помощь, совет, наводящие вопросы и пр.