如何在调用XXX_IOControl结束后映射Windows CE设备驱动程序中的调用者内存?

StackOverflow https://stackoverflow.com/questions/173596

  •  05-07-2019
  •  | 
  •  

我正在Windows CE设备驱动程序中实现一个ioctl,该驱动程序获取指向大块应用程序内存的指针,以执行通过对DeviceIoControl的应用程序调用启动的异步I / O。

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

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

这是在Windows CE 5.0上。

有帮助吗?

解决方案

回答我自己的问题:

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

DWORD saved_perms = SetProcPermissions(caller_perms);
... Do stuff ...
SetProcPermissions(saved_perms);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top