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 |