Я изучаю программирование ядра Windows, и мне интересно, как передать массив байтов из драйвера ядра в приложение пользовательского режима, где драйвер ядра инициирует вызов?
Если бы я сделал это среди процессов пользовательского режима (скажем, от службы к приложению с графическим интерфейсом), я бы использовал именованный канал или общую память с именованным событием и именованным мьютексом для синхронизации. Но я не понимаю, что делать со стороны драйвера ядра.
Вот мой реальный пример: у меня есть функция обратного вызова ядра, которую можно вызывать в любое время с помощью STRING. Затем мне нужно передать строку из нее моему текущему процессу в пользовательском режиме и предупредить его.
IoReportTargetDeviceChangeAsynchronous()
на стороне драйвера иRegisterDeviceNotification()
иWM_DEVICECHANGE
на стороне пользователя (без использования реального аппаратного устройства). Кроме того, был предложен объект раздела черезZwCreateSection()
. Я просто не уверен, какой здесь подход рекомендуется? - person MikeF   schedule 19.06.2018FltRegisterFilter
+FltCreateCommunicationPort
из ядра.FltStartFiltering
можно даже не звонить, если не нужно прикреплять к томам. из пользовательского режимаFilterConnectCommunicationPort
,FilterGetMessage
и т. д. - person RbMm   schedule 23.06.2018