IWDFIoRequest ::Send, méthode (wudfddi.h)
[Avertissement : UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Prise en main avec UMDF.]
La méthode Send envoie une requête à la cible d’E/S spécifiée.
Syntaxe
HRESULT Send(
[in] IWDFIoTarget *pIoTarget,
[in] ULONG Flags,
[in] LONGLONG Timeout
);
Paramètres
[in] pIoTarget
Pointeur vers l’interface IWDFIoTarget pour l’objet cible d’E/S, qui représente généralement un pilote inférieur dans la pile.
[in] Flags
OR au niveau du bit valide d’indicateurs WDF_REQUEST_SEND_OPTIONS_FLAGS typés.
[in] Timeout
Durée, en unités de temps système (intervalles de 100 nanosecondes), qui peut s’écouler avant que l’infrastructure annule automatiquement la demande d’E/S.
- Si la valeur est négative, le délai d’expiration est relatif à l’heure système actuelle.
- Si la valeur est positive, l’heure d’expiration est spécifiée comme heure absolue (qui est relative au 1er janvier 1601).
- Si la valeur est égale à zéro, le framework n’expire pas la demande.
Valeur retournée
Envoyer des retours S_OK si l’opération réussit. Sinon, cette méthode retourne l’un des codes d’erreur définis dans Winerror.h.
Notez que la valeur de retour représente le status de la tentative de la méthode Send d’envoyer la demande d’E/S à la cible d’E/S. La valeur de retour ne représente pas l’achèvement status de la demande d’E/S. Votre pilote doit utiliser l’interface IWDFRequestCompletionParams pour obtenir la status d’achèvement de la demande d’E/S.
Remarques
Si Send retourne un code d’erreur, le pilote doit généralement terminer la requête avec le code d’erreur envoyé retourné, comme le montre le code de la section Exemple suivant.
Si votre pilote définit l’indicateur WDF_REQUEST_SEND_OPTION_SYNCHRONOUS dans le paramètre Flags et si Send envoie correctement la demande d’E/S à la cible d’E/S, Send retourne une fois que la cible d’E/S a terminé la demande d’E/S. Dans ce cas, Send retourne S_OK et le pilote peut appeler immédiatement IWDFIoRequest ::GetCompletionParams pour obtenir l’interface IWDFRequestCompletionParams . L’exemple de code dans IWDFIoRequest ::GetCompletionParams montre un appel à Envoyer avec l’indicateur WDF_REQUEST_SEND_OPTION_SYNCHRONOUS défini.
Si votre pilote ne définit pas l’indicateur de WDF_REQUEST_SEND_OPTION_SYNCHRONOUS et si Send envoie correctement la demande d’E/S à la cible d’E/S, Envoyer retourne S_OK pendant que la cible d’E/S traite toujours la demande d’E/S de manière asynchrone. Dans ce cas, le pilote fournit une fonction de rappel IRequestCallbackRequestCompletion ::OnCompletion que le framework appelle une fois que la cible d’E/S a terminé la demande d’E/S. En règle générale, la fonction de rappel OnCompletion appelle IWDFIoRequest ::GetCompletionParams. L’exemple de code de la section Exemple suivant montre un appel à Envoyer sans l’indicateur WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.
Un pilote ne peut pas appeler Send pour envoyer une demande d’E/S à un canal USB, si le pilote a configuré un lecteur continu pour le canal.
Exemples
L’exemple de code suivant transfère une requête à la cible d’E/S d’un appareil.
IWDFIoRequest* FxRequest;
//
// Set the completion callback.
// When the lower request is completed, the driver is
// notified through the completion callback.
//
IRequestCallbackRequestCompletion *completionCallback =
QueryIRequestCallbackRequestCompletion();
FxRequest->SetCompletionCallback(
completionCallback,
NULL //pContext
);
completionCallback->Release();
//
// Format the I/O request.
FxRequest->FormatUsingCurrentType( );
//
// Send down the request.
//
HRESULT hrSend = S_OK;
hrSend = FxRequest->Send(
m_FxIoTarget,
0, // Asynchronous
0 // No time-out
);
if (S_OK != hrSend) {
//
// If the send failed, the driver must complete the
// request with the failure.
FxRequest->CompleteWithInformation(hrSend, 0);
}
Configuration requise
Condition requise | Valeur |
---|---|
Fin de la prise en charge | Non disponible dans UMDF 2.0 et versions ultérieures. |
Plateforme cible | Desktop (Expérience utilisateur) |
Version UMDF minimale | 1.5 |
En-tête | wudfddi.h (inclure Wudfddi.h) |
DLL | WUDFx.dll |
Voir aussi
IRequestCallbackRequestCompletion ::OnCompletion