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