首页 > 解决方案 > 防止用户模式 ​​APC 进入用户模式

问题描述

内核模式代码可以通过进入关键或受保护区域或通过提高当前 IRQL来阻止部分或全部异步过程调用 (APC) 。这样,就可以在不受 APC 干扰的情况下执行包含警报等待的代码。

用户模式代码是否有类似的方法来(暂时)禁用当前线程中的用户模式 ​​APC?


对于托管和非托管代码的答案,我会很高兴。我已经验证以下方法不起作用

标签: c#c++windowswinapi

解决方案


。防止用户模式 ​​APC 发生的唯一选项是:

  • 一开始就没有调度 APC
  • 不执行警报等待
  • 在另一个线程上调度 APC
  • 将所有可警报等待移动到另一个没有安排 APC 或首先不允许可警报等待的线程

    QueueUserWorkItem使用时似乎是不错的候选人WT_EXECUTEDEFAULT

    回调函数排队到 [...] 无法执行警报等待的线程。

(感谢RbMm确保评论中没有用于禁用 APC 的用户模式 ​​API)


推荐阅读