Partager via


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.
Les délais d’expiration relatifs ne sont pas affectés par les modifications apportées à l’heure système qui peuvent se produire dans le délai d’attente spécifié. Les délais d’expiration absolus reflètent les changements d’heure système.

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

IWDFIoRequest

IWDFIoRequest ::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)