Я использую пример KbFilter в WDK, пытаясь отправить IOCTL в функцию, которая вызывается KbFilter_ServiceCallback и, следовательно, выполняется в DISPATCH_LEVEL. Функция просто должна отправить IOCTL и вернуться, не ожидая заполнения выходного буфера, чтобы он мог быть асинхронным, запускаться и забываться.
В настоящее время я использую функции WDF WdfIoTargetFormatRequestForIoctl и WdfRequestSend , чтобы попытаться отправить на DISPATCH_LEVEL и ничего не получить. Вызов WdfRequestSend выполняется успешно, но IOCTL не получен.
Использование любого из WdfIoTargetSendIoctlSynchronously или шаблона WDM IoBuildDeviceIoControlRequest () и IoCallDriver () требует PASSIVE_LEVEL, и единственный способ, которым я знаю, является создание отдельного потока, который создает VEL для вызова PASSIVE_, работает в PASSIVE_LEVEL и передает ему инструкции через буфер или очередь, синхронизированные с спин-блокировкой и семафором.
Может кто-нибудь сказать мне, есть ли более простой способ передать IOCTL в драйверы под моим фильтром, или поток / очередь приближаются к нормальному образцу, когда вам нужно сделать что-то с более высоким IRQL? При каких обстоятельствах я могу использовать KeRaiseIrql и это то, что я должен использовать? Спасибо.