Как сопоставить память вызывающего абонента в драйвере устройства Windows CE после окончания вызова XXX_IOControl? - PullRequest
1 голос
/ 06 октября 2008

Я реализую ioctl в драйвере устройства Windows CE, который берет указатель на большой кусок памяти приложения для выполнения асинхронного ввода-вывода, инициируемого посредством вызова приложения в DeviceIoControl.

При использовании MapCallerPtr () указатель становится неотображенным, когда возвращается функция XXX_IOControl; когда указатель используется в IST, он больше не отображается, что приводит к сбою.

Каков наилучший способ сопоставить указатель после завершения вызова с XXX_IOControl? Приложение гарантирует, что память останется действительной до тех пор, пока не получит указание от водителя о том, что драйвер завершил работу с ним.

Это в Windows CE 5.0.

1 Ответ

1 голос
/ 06 октября 2008

Отвечая на мой вопрос:

В XXX_IOControl отобразите указатель с помощью MapPtrToProcess () и сохраните разрешения потока с помощью GetCurrentPermissions (). В потоке, который будет использовать сопоставленный указатель, вызовите SetProcPermissions () с сохраненным возвращаемым значением из GetCurrentPermissions (), указателями разыменования, а затем восстановите разрешения для потока после завершения.

DWORD saved_perms = SetProcPermissions(caller_perms);
... Do stuff ...
SetProcPermissions(saved_perms);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...