QueueUserAPC2 函数 (processthreadsapi.h)

将用户模式 异步过程调用 (APC) 对象添加到指定线程的 APC 队列。

语法

BOOL QueueUserAPC2(
  PAPCFUNC             ApcRoutine,
  HANDLE               Thread,
  ULONG_PTR            Data,
  QUEUE_USER_APC_FLAGS Flags
);

参数

ApcRoutine

指向应用程序提供的 APC 函数的指针,该函数在指定线程执行可警报等待操作时调用。 有关详细信息,请参阅 APCProc

对于特殊的用户模式 APC,不需要可发出警报的等待。 有关特殊用户模式 APC 的详细信息,请参阅 备注

Thread

线程的句柄。 句柄必须具有 THREAD_SET_CONTEXT 访问权限。 有关详细信息,请参阅 同步对象安全性和访问权限

Data

传递给 ApcRoutine 参数指向的 APC 函数的单个值。

Flags

来自QUEUE_USER_APC_FLAGS枚举的值,用于修改用户模式 APC 的行为。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

仅当目标线程处于可警报状态时,才会执行常规用户模式 APC。 有关常规用户模式 APC 的其他说明,请参阅 QueueUserAPC 函数

即使目标线程不处于可警报状态,特殊用户模式 APC 也始终执行。 例如,如果目标线程当前正在执行用户模式代码,或者如果目标线程当前正在执行可警报等待,则目标线程将立即中断 APC 执行。 如果目标线程正在执行系统调用或执行不可警报的等待,则会在系统调用或非可警报等待完成后执行 APC, (等待) 不会中断。

由于特殊用户模式 APC 的执行与目标线程不同步,因此必须特别注意 (超出多线程和同步) 的正常要求。 例如,在获取任何锁时,中断的目标线程可能已拥有该锁,或者正在获取或释放锁。 此外,由于没有阻止线程接收特殊用户模式 APC 的设施,因此可以在已执行特殊用户模式 APC 的目标线程上执行特殊的用户模式 APC。

目前,特殊的用户模式 APC 仅在本机体系结构上受支持,在 WoW 下运行时不受支持。

要求

要求
最低受支持的客户端 Windows 11 (内部版本 22000)
最低受支持的服务器 Windows Server 2022 (内部版本 20348)
目标平台 Windows
标头 processthreadsapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll