Partager via


Fonction KeDelayExecutionThread (wdm.h)

La routine KeDelayExecutionThread place le thread actif dans un état d’attente alertable ou non modifiable pendant un intervalle spécifié.

Syntaxe

NTSTATUS KeDelayExecutionThread(
  [in] KPROCESSOR_MODE WaitMode,
  [in] BOOLEAN         Alertable,
  [in] PLARGE_INTEGER  Interval
);

Paramètres

[in] WaitMode

Spécifie le mode processeur dans lequel l’appelant est en attente, qui peut être KernelMode ou UserMode. Les pilotes de niveau inférieur doivent spécifier KernelMode.

[in] Alertable

Spécifie TRUE si l’attente est alertable. Les pilotes de niveau inférieur doivent spécifier FALSE.

[in] Interval

Spécifie l’heure absolue ou relative, en unités de 100 nanosecondes, pour laquelle l’attente doit se produire. Une valeur négative indique l’heure relative. Les heures d’expiration absolues suivent toute modification de l’heure système ; les heures d’expiration relatives ne sont pas affectées par les changements d’heure système.

Valeur retournée

KeDelayExecutionThread retourne l’une des valeurs suivantes qui décrit comment le délai a été terminé :

Code de retour Description
STATUS_SUCCESS
Le délai s’est terminé, car l’intervalle spécifié s’est écoulé.
STATUS_ALERTED
Le délai s’est terminé, car le thread a été alerté.
STATUS_USER_APC
Un APC en mode utilisateur a été remis avant l’expiration de l’intervalle spécifié.
 

Notez que la macro NT_SUCCESS reconnaît toutes ces valeurs status comme des valeurs de « réussite ».

Remarques

L’heure d’expiration est calculée et le thread actuel est placé dans un état d’attente. Lorsque l’intervalle spécifié est passé, le thread quitte l’état d’attente et est placé dans l’état prêt, devenant éligible à l’exécution.

Le paramètre Alertable détermine quand le thread peut être alerté et son état d’attente par conséquent abandonné. Pour plus d’informations, consultez Waits and APCs.

Si le paramètre WaitMode est UserMode, la pile du noyau peut être permutée pendant l’attente. Par conséquent, un appelant ne doit jamais tenter de passer des paramètres sur la pile lors de l’appel de KeDelayExecutionThread à l’aide de l’argument UserMode .

Il est particulièrement important de case activée la valeur de retour de KeDelayExecutionThread lorsque le paramètre WaitMode est UserMode ou alertable a la valeur TRUE, car KeDelayExecutionThread peut revenir tôt avec un status de STATUS_USER_APC ou STATUS_ALERTED.

Toutes les attentes à long terme qui peuvent être abandonnées par un utilisateur doivent être des attentes UserMode et Alertable doit avoir la valeur FALSE.

Si possible, Alertable doit avoir la valeur FALSE et WaitMode doit être défini sur KernelMode, afin de réduire la complexité du pilote. La principale exception à cette ligne directrice est lorsque l’attente est une attente à long terme.

L’heure d’expiration du délai est exprimée soit comme une heure absolue à laquelle le délai doit expirer, soit une heure par rapport à l’heure système actuelle. Si la valeur du paramètre Interval est positive, l’heure d’expiration est une heure absolue. Si cette valeur est négative, l’heure d’expiration est une heure relative.

Les temps d’expiration sont mesurés par rapport à l’horloge système, et la précision avec laquelle le système d’exploitation peut détecter l’expiration d’un minuteur est limitée par la granularité de l’horloge système. Pour plus d’informations, consultez Précision du minuteur.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport),IrqlKeApcLte1(wdm), PowerIrpDDis(wdm)

Voir aussi

KeQuerySystemTime