Partager via


Fonction QueueUserAPC2 (processthreadsapi.h)

Ajoute un objet d’appel de procédure asynchrone en mode utilisateur (APC) à la file d’attente APC du thread spécifié.

Syntaxe

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

Paramètres

ApcRoutine

Pointeur vers la fonction APC fournie par l’application à appeler lorsque le thread spécifié effectue une opération d’attente pouvant être alertée. Pour plus d’informations, consultez APCProc.

Pour les API spéciales en mode utilisateur, une attente pouvant être alertable n’est pas nécessaire. Pour plus d’informations sur les API spéciales en mode utilisateur, consultez Remarques .

Thread

Handle pour le thread. Le handle doit avoir THREAD_SET_CONTEXT autorisation d’accès. Pour plus d’informations, consultez Synchronisation des droits d’accès et de sécurité des objets.

Data

Valeur unique qui est passée à la fonction APC pointée par le paramètre ApcRoutine .

Flags

Valeur de QUEUE_USER_APC_FLAGS énumération qui modifie le comportement de l’APC en mode utilisateur.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

Les API en mode utilisateur standard sont exécutées uniquement si le thread cible est dans un état pouvant être alerté. Pour obtenir des remarques supplémentaires sur les API en mode utilisateur standard, consultez La fonction QueueUserAPC .

Les API spéciales en mode utilisateur s’exécutent toujours, même si le thread cible n’est pas dans un état alerte. Par exemple, si le thread cible exécute actuellement du code en mode utilisateur ou si le thread cible effectue actuellement une attente pouvant être alertée, le thread cible est immédiatement interrompu pour l’exécution d’APC. Si le thread cible exécute un appel système ou effectue une attente non alertable, l’APC est exécuté une fois l’appel système ou l’attente non alertable terminée (l’attente n’est pas interrompue).

Étant donné que l’exécution de l’APC en mode utilisateur spécial n’est pas synchronisée avec le thread cible, une attention particulière doit être prise (au-delà des exigences normales pour le multithreading et la synchronisation). Par exemple, lors de l’acquisition de verrous, le thread cible interrompu peut être déjà propriétaire du verrou ou être en train d’acquérir ou de libérer le verrou. En outre, étant donné qu’il n’existe aucune fonctionnalité permettant d’empêcher un thread de recevoir des API spéciales en mode utilisateur, un APC en mode utilisateur spécial peut être exécuté sur un thread cible qui exécute déjà un APC en mode utilisateur spécial.

Actuellement, les API spéciales en mode utilisateur ne sont prises en charge que sur les architectures natives, et non en cas d’exécution sous WoW.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 11 (build 22000)
Serveur minimal pris en charge Windows Server 2022 (build 20348)
Plateforme cible Windows
En-tête processthreadsapi.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll