Вы можете легко отправлять асинхронные запросы на чтение на устройство и хранить их в драйвере в очереди IRP.
Это называется инвертированным вызовом.
См. Эту статью по технике.
Когда вы отправляете запрос водителю, вы можете указать, что указатель используемого режима сохраняется.Благодаря этому вы можете напрямую общаться через эту «общую память».