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 |