WdfIoQueueReadyNotify, fonction (wdfio.h)
[S’applique à KMDF et UMDF]
La méthode WdfIoQueueReadyNotify inscrit (ou désinscrit) une fonction de rappel d’événements que l’infrastructure appelle chaque fois qu’une file d’attente d’E/S spécifiée précédemment vide reçoit une ou plusieurs demandes d’E/S.
Syntaxe
NTSTATUS WdfIoQueueReadyNotify(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE QueueReady,
[in, optional] WDFCONTEXT Context
);
Paramètres
[in] Queue
Handle d’un objet de file d’attente d’infrastructure.
[in, optional] QueueReady
Pointeur vers une fonction de rappel EvtIoQueueState fournie par le pilote, si le pilote s’inscrit pour la notification prête, ou NULL si le pilote est en cours de désinscription.
[in, optional] Context
Pointeur non typé vers les informations de contexte fournies par le pilote que l’infrastructure transmet à la fonction de rappel EvtIoQueueState , si le pilote s’inscrit pour la notification prête, ou NULL si le pilote est en cours de désinscription.
Valeur retournée
WdfIoQueueReadyNotify retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :
Code de retour | Description |
---|---|
|
Le pilote a fourni un handle non valide. |
|
Cette valeur est retournée si l’une des opérations suivantes se produit :
|
Cette méthode peut également retourner d’autres valeurs NTSTATUS.
Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.
Remarques
Une fois qu’un pilote a appelé WdfIoQueueReadyNotify pour inscrire une fonction de rappel EvtIoQueueState , l’infrastructure appelle la fonction de rappel chaque fois que l’état de la file d’attente spécifiée passe de vide à non vide. Plus précisément, l’infrastructure appelle EvtIoQueueState lorsqu’une requête arrive sur une file d’attente vide, même si le pilote possède toujours les requêtes précédemment remises de la file d’attente qu’il n’a pas encore terminées. Vous pouvez modifier l’IRQL auquel le rappel s’exécute en spécifiant ExecutionLevel dans WDF_OBJECT_ATTRIBUTES au moment de la création de la file d’attente . Pour plus d’informations, consultez la section Remarques deEVT_WDF_IO_QUEUE_STATE.
L’infrastructure n’appelle pas EvtIoQueueState lorsque la file d’attente spécifiée est arrêtée. Lorsque la file d’attente démarre, l’infrastructure appelle EvtIoQueueState si la file d’attente n’est pas vide.
Votre pilote peut appeler WdfIoQueueReadyNotify uniquement pour les files d’attente d’E/S qui utilisent la méthode de répartition manuelle .
La fonction de rappel EvtIoQueueState appelle généralement WdfIoQueueRetrieveNextRequest ou WdfIoQueueRetrieveRequestByFileObject dans une boucle pour récupérer toutes les requêtes qui sont arrivées depuis la dernière exécution de la fonction de rappel.
Pour empêcher l’infrastructure d’appeler la fonction de rappel EvtIoQueueState , le pilote doit appeler À nouveau WdfIoQueueReadyNotify avec le paramètre QueueReady défini sur NULL. Toutefois, le pilote doit d’abord appeler WdfIoQueueStop ou WdfIoQueueStopSynchronously pour arrêter la file d’attente d’E/S. Le pilote peut ensuite appeler WdfIoQueueStart pour redémarrer la file d’attente.
Lorsqu’un pilote appelle WdfIoQueueReadyNotify pour inscrire une fonction de rappel EvtIoQueueState , il est possible pour l’infrastructure d’appeler la fonction de rappel avant que WdfIoQueueReadyNotify ne retourne.
Pour plus d’informations sur la méthode WdfIoQueueReadyNotify , consultez Méthodes de répartition pour les demandes d’E/S.
Exemples
L’exemple de code suivant inscrit la fonction EvtIoQueueReady d’un pilote, afin que cette fonction soit appelée lorsque la file d’attente d’E/S spécifiée reçoit une demande d’E/S.
Status = WdfIoQueueReadyNotify(
ReadQueue,
EvtIoQueueReady,
myQueueContext
);
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
Version KMDF minimale | 1.0 |
Version UMDF minimale | 2.0 |
En-tête | wdfio.h (inclure 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) |