我正在Windows CE设备驱动程序中实现一个ioctl,该驱动程序获取指向大块应用程序内存的指针,以执行通过对DeviceIoControl的应用程序调用启动的异步I / O。
使用MapCallerPtr()时,XXX_IOControl函数返回时指针被取消映射;当指针在IST中使用时,它不再被映射导致崩溃。
将指针映射到XXX_IOControl的调用结束之后的最佳方法是什么?应用程序保证内存将保持有效,直到它收到驱动程序驱动程序已完成驱动程序的指示。
这是在Windows CE 5.0上。
答案 0 :(得分:1)
回答我自己的问题:
在XXX_IOControl中,使用MapPtrToProcess()映射指针,并使用GetCurrentPermissions()保存线程的权限。在将使用映射指针的线程中,使用GetCurrentPermissions()中保存的返回值调用SetProcPermissions(),取消引用指针,然后在完成时恢复线程权限。
DWORD saved_perms = SetProcPermissions(caller_perms);
... Do stuff ...
SetProcPermissions(saved_perms);