WdfTimerStart, fonction (wdftimer.h)
[S’applique à KMDF et UMDF]
La méthode WdfTimerStart démarre l’horloge d’un minuteur.
Syntaxe
BOOLEAN WdfTimerStart(
[in] WDFTIMER Timer,
[in] LONGLONG DueTime
);
Paramètres
[in] Timer
Handle vers un objet de minuteur de framework obtenu en appelant WdfTimerCreate.
[in] DueTime
Période, en unités de temps système (intervalles de 100 nanosecondes). L’infrastructure appelle la fonction de rappel EvtTimerFunc du pilote lorsque la période spécifiée s’est écoulée. La valeur de la période peut être négative ou positive comme suit :
- Si la valeur est négative, la période est relative à l’heure système actuelle.
- Si la valeur est positive, la période spécifie une heure absolue (qui est effectivement relative au 1er janvier 1601).
Avertissement
Si vous définissez le membre UseHighResolutionTimer de WDF_TIMER_CONFIG sur WdfTrue, vous devez appeler WdfTimerStart avec le paramètre DueTime défini sur une valeur négative. Sinon, l’appel provoque le blocage du système.
Les heures relatives ne sont pas affectées par les modifications apportées à l’heure système qui peuvent se produire au cours de la période spécifiée. Les heures absolues reflètent les changements de temps système.
L’infrastructure fournit fonctions de conversion de temps qui convertissent les valeurs de temps en unités de temps système.
Valeur de retour
WdfTimerStart retourne TRUE si l’objet minuteur était dans la file d’attente du minuteur du système. Sinon, cette méthode retourne FALSE. Pour plus d’informations, consultez la section Remarques suivante.
Une vérification de bogue se produit si le pilote fournit un handle d’objet non valide.
Remarques
Les pilotes doivent toujours appeler WdfTimerStart pour démarrer un minuteur après sa création, que le minuteur soit un minuteur périodique ou non.
Une fois qu’un pilote appelle WdfTimerStart, l’infrastructure appelle la fonction de rappel EvtTimerFunc du pilote lorsque l’heure spécifiée pour le paramètre DueTime s’écoule. Après ce premier appel, l’infrastructure appelle la fonction de rappel chaque fois que la période spécifiée par l'Période membre de la structure de WDF_TIMER_CONFIG du pilote s’écoule.
L’expiration du minuteur dépend finalement de la granularité de l’horloge système. La valeur spécifiée pour DueTime garantit que l’infrastructure appelle la fonction de rappel EvtTimerFunc du pilote sur ou après la DueTimedonnée. Toutefois, WdfTimerStart ne peut pas remplacer la granularité de l’horloge système, quelle que soit la valeur spécifiée pour DueTime.
Lorsqu’un pilote appelle WdfTimerStart, son objet minuteur est ajouté à la file d’attente des objets du minuteur du système. Si le minuteur n’est pas un minuteur périodique, le système supprime l’objet minuteur de la file d’attente une fois que le délai d’échéance du minuteur s’est écoulé. Si le minuteur est un minuteur périodique, l’objet minuteur reste dans la file d’attente jusqu’à ce que le pilote appelle WdfTimerStop.
Un pilote peut appeler WdfTimerStart à partir de son EvtTimerFunc fonction de rappel afin de redémarrer un minuteur non périodique après son expiration.
WdfTimerStart retourne TRUE si le pilote a précédemment appelé WdfTimerStart et que l’objet minuteur est toujours dans la file d’attente du système, car la période n’a pas expiré (ou parce qu’il s’agit d’un minuteur périodique). Avant WdfTimerStart retourne TRUE, le système d’exploitation réinitialise la période à la valeur spécifiée par le pilote spécifié dans le nouvel appel à WdfTimerStart. L’infrastructure appelle la fonction de rappel EvtTimerFunc uniquement une fois la nouvelle période écoulée.
Pour arrêter l’horloge du minuteur, le pilote peut appeler WdfTimerStop.
Pour plus d’informations sur les objets du minuteur de framework, consultez Using Timers.
Exemples
L’exemple de code suivant démarre un minuteur. L’infrastructure appelle la fonction de rappel EvtTimerFunc du minuteur après 10 millisecondes.
BOOLEAN inTimerQueue;
inTimerQueue = WdfTimerStart(
timerHandle,
WDF_REL_TIMEOUT_IN_MS(10)
);
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
version minimale de KMDF | 1.0 |
version minimale de UMDF | 2.0 |
d’en-tête | wdftimer.h (include Wdf.h) |
bibliothèque | Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
règles de conformité DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |