异步过程调用

admin 2024年8月9日16:47:46评论5 views字数 814阅读2分42秒阅读模式

    异步 过程调用 (APC) 是在特定线程的上下文中异步执行的函数。当 APC 排队到线程时,系统会发出软件中断。下次计划线程时,它将运行 APC 函数。每个线程都有自己的 APC 队列。应用程序通过调用 QueueUserAPC 函数将 APC 排队到线程。调用线程在对 QueueUserAPC 的调用中指定 APC 函数的地址。APC 的队列是线程调用 APC 函数的请求。

APC分类

    系统生成的 APC 称为 内核模式 APC。

    应用程序生成的 APC 称为 用户模式 APC。

注意:线程必须处于可警报状态才能运行用户模式 APC。

用户模式APC报警状态

    当用户模式 APC 排队时,它排队的线程不会定向到调用 APC 函数,除非它处于可警报状态。线程在调用 SleepEx、 SignalObjectAndWait、 MsgWaitForMultipleObjectsEx、 WaitForMultipleObjectsEx 或 WaitForSingleObjectEx 函数时进入可警报状态:

  1. Sleep

  2. SleepEx

  3. MsgWaitForMultipleObjects

  4. MsgWaitForMultipleObjectsEx

  5. WaitForSingleObject

  6. WaitForSingleObjectEx

  7. WaitForSingleObjects

  8. WaitForSingleObjectsEx

  9. SignalObjectAndWait

线程挂起

    如果在 APC 排队之前满足等待,则线程不再处于可警报等待状态,因此不会执行 APC 函数。但是,APC 仍处于排队状态,因此当线程调用另一个可警报等待函数时,将执行 APC 函数。也就是说要使用APC函数需要存在一个挂起的线程。

参考

  1. https://learn.microsoft.com/zh-cn/windows/win32/sync/asynchronous-procedure-calls

原文始发于微信公众号(蟹堡安全团队):异步过程调用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月9日16:47:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   异步过程调用https://cn-sec.com/archives/3048362.html

发表评论

匿名网友 填写信息