Может это все можно было реализовать проще? надежней?? Используя внутренние очереди драйвера?
А почему ты думаешь, что это ненадежно?
Кстати Рихтер пишет, что все механизмы по межпотоковому взаимодействию так или иначе используют filemapping и что это самый быстрый метод
Уж не помню что там Рихтер пишет(не очень люлю я этого товарища, особенно после того как он .NET стал пропагандировать), но мысль его вероятно такая- filemapping это память разделяемая между несколькими процессами.
Я бы так сказал- общение между процессами и общение между драйвером и пользовательским приложением не всегда одно и то же.
В старом форуме мы обсуждали проблему того как создав в юзерском приложении буфер, передать указатель и его размер в драйвер, и в драйвере сразу в этот буфер писать, то есть тем самым исключив операцию выделения памяти в ядре и копирования между двумя буферами. Проблему решили при помощи MDL, там даже код был. Ограничения у того решения такие- так как память отображалась на системное адресное пространство и не выгружается в страничный файл, размер буфера должен быть в разумных переделах, преимущества- буфер видени из любого контекста и на любом IRQL. Вот только Grom никак не выложит старый форум.
Если же ты хочешь filemapping то тебе надо использовать ф-ции
ZwCreateSection
ZwMapViewOfSection
ZwUnmapViewOfSection
тебе нужно отображение, поддерживаемое страничным файлом, если только ты не хочешь сразу в файл на диске писать.