копирование данных из пользовательского приложения в драйвер ядра через memcpy - PullRequest
0 голосов
/ 08 марта 2019

хорошо, я просто все упросту, как я могу отправлять и получать данные из моего приложения пользовательского режима в драйвер ядра, используя общую память.с фактическим мьютексом, чтобы указать, закончен ли мой запрос или нет.и как я могу вызвать функцию чтения памяти, не добавляя ее в функцию Major_irp, потому что я не хочу добавлять какой-либо код IOCTL

1 Ответ

0 голосов
/ 08 марта 2019

Следующее предполагает ядро ​​в стиле * nix, но те же понятия также переводятся в Windows. В других ядрах ОС могут использоваться другие концепции:

Либо реализуйте системный вызов mmap в своем коде, чтобы отобразить выделенную память на стороне ядра в пространство пользователя. Или просто внедрите системные вызовы read и write для чтения / записи непосредственно из / в память пространства пользователя.

Специально для Linux: если вы хотите асинхронно обращаться к пользовательской памяти, используйте vmsplice с флагом SPLICE_F_GIFT. Примитивы синхронизации, такие как мьютексы или семафоры, обычно не пересекают границу пространства пользователя / пространства ядра. Если вы хотите работать асинхронно, вам придется реализовать файловую операцию poll, чтобы сигнализировать пользовательскому пространству, когда операция «файл» завершена. .

...