1

我在 Windows CE 设备驱动程序中实现了一个 ioctl,它采用指向大量应用程序内存的指针来执行通过对 DeviceIoControl 的应用程序调用启动的异步 I/O。

使用 MapCallerPtr() 时,指针在 XXX_IOControl 函数返回时被取消映射;当指针在 IST 中使用时,它不再被映射导致崩溃。

将超出调用结束的指针映射到 XXX_IOControl 的最佳方法是什么?应用程序保证内存将保持有效,直到它从驱动程序收到驱动程序已完成它的指示。

这是在 Windows CE 5.0 上。

4

1 回答 1

1

回答我自己的问题:

在 XXX_IOControl 中,使用 MapPtrToProcess() 映射指针并使用 GetCurrentPermissions() 保存线程的权限。在将使用映射指针的线程中,使用从 GetCurrentPermissions() 保存的返回值调用 SetProcPermissions(),取消引用指针,然后在完成后恢复线程权限。

DWORD saved_perms = SetProcPermissions(caller_perms);
... Do stuff ...
SetProcPermissions(saved_perms);
于 2008-10-06T09:06:49.597 回答