防止用户模式APC进入用户模式

问题描述 投票:-2回答:1

内核模式代码可以prevent some or all asynchronous procedure calls (APCs) by entering a critical or guarded region or by Raising the current IRQL。这样,可以执行包含可警告等待的代码而不受APC的干扰。

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


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

  • 关键部分(EnterCriticalSection / LeaveCriticalSection
  • stdlib互斥体(std::mutexstd::recursive_mutex,...)
  • 托管同步功能(lock语句,MethodImpl(MethodImplOptions.Synchronized)注释)
c# c++ windows winapi
1个回答
0
投票

不会。阻止用户模式APC发生的唯一选项是:

  • 首先不安排APC
  • 没有执行可警告的等待
  • 在另一个线程上调度APC
  • 将所有可警告的等待移动到另一个没有安排APC的线程,或者首先不允许警报等待 当使用QueueUserWorkItem时,WT_EXECUTEDEFAULT似乎是个好人选: 回调函数排队到一个无法执行可警告等待的线程。

(感谢RbMm确保在评论中没有用户模式API来禁用APC)

© www.soinside.com 2019 - 2024. All rights reserved.