代码之家  ›  专栏  ›  技术社区  ›  janm

如何在Windows CE设备驱动程序中映射呼叫者内存,使其超过对xxx iocontrol的调用结束?

  •  1
  • janm  · 技术社区  · 16 年前

    我正在WindowsCE设备驱动程序中实现ioctl,该驱动程序使用指向大量应用程序内存的指针来执行通过对deviceiocontrol的应用程序调用启动的异步I/O。

    当使用mapCallerptr()时,当xxx iocontrol函数返回时,指针将被取消映射;当在IST中使用指针时,指针将不再被映射,从而导致崩溃。

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

    这在Windows CE 5.0上。

    1 回复  |  直到 13 年前
        1
  •  1
  •   janm    16 年前

    回答我自己的问题:

    在xxx_icontrol中,使用mapptroprocess()映射指针,并使用getcurrentPermissions()保存线程的权限。在将使用映射指针的线程中,使用getcurrentPermissions()中保存的返回值调用setProcPermissions(),取消引用指针,然后在完成后还原线程权限。

    DWORD saved_perms = SetProcPermissions(caller_perms);
    ... Do stuff ...
    SetProcPermissions(saved_perms);