IWDFIoRequest::Send-Methode (wudfddi.h)

[Warnung: UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 für neuere Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF.]

Die Send-Methode sendet eine Anforderung an das angegebene E/A-Ziel.

Syntax

HRESULT Send(
  [in] IWDFIoTarget *pIoTarget,
  [in] ULONG        Flags,
  [in] LONGLONG     Timeout
);

Parameter

[in] pIoTarget

Ein Zeiger auf die IWDFIoTarget-Schnittstelle für das E/A-Zielobjekt, das in der Regel einen niedrigeren Treiber im Stapel darstellt.

[in] Flags

Ein gültiger bitweiser OR mit WDF_REQUEST_SEND_OPTIONS_FLAGS typisierten Flags.

[in] Timeout

Die Zeitspanne in Systemzeiteinheiten (Intervalle von 100 Nanosekunden), die verstreichen kann, bevor das Framework die E/A-Anforderung automatisch abbricht.

  • Wenn der Wert negativ ist, ist die Ablaufzeit relativ zur aktuellen Systemzeit.
  • Wenn der Wert positiv ist, wird die Ablaufzeit als absolute Zeit angegeben (relativ zum 1. Januar 1601).
  • Wenn der Wert 0 ist, führt das Framework kein Timeout für die Anforderung aus.
Relative Ablaufzeiten werden nicht durch Änderungen an der Systemzeit beeinflusst, die innerhalb des angegebenen Timeoutzeitraums auftreten können. Absolute Ablaufzeiten spiegeln Änderungen der Systemzeit wider.

Rückgabewert

Senden gibt S_OK zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt diese Methode einen der Fehlercodes zurück, die in Winerror.h definiert sind.

Beachten Sie, dass der Rückgabewert den status des Versuchs der Send-Methode darstellt, die E/A-Anforderung an das E/A-Ziel zu senden. Der Rückgabewert stellt nicht die Vervollständigung status der E/A-Anforderung dar. Ihr Treiber muss die IWDFRequestCompletionParams-Schnittstelle verwenden, um die Status der E/A-Anforderung zu erhalten.

Hinweise

Wenn Send einen Fehlercode zurückgibt, sollte der Treiber die Anforderung in der Regel mit dem zurückgegebenen Fehlercode abschließen, wie der Code im folgenden Beispielabschnitt zeigt.

Wenn Ihr Treiber das WDF_REQUEST_SEND_OPTION_SYNCHRONOUS-Flag im Flags-Parameter festlegt und wenn Send die E/A-Anforderung erfolgreich an das E/A-Ziel sendet, wird send zurückgegeben, nachdem das E/A-Ziel die E/A-Anforderung abgeschlossen hat. In diesem Fall gibt Send S_OK zurück, und der Treiber kann sofort IWDFIoRequest::GetCompletionParams aufrufen, um die IWDFRequestCompletionParams-Schnittstelle abzurufen. Das Codebeispiel unter IWDFIoRequest::GetCompletionParams zeigt einen Aufruf von Senden mit dem WDF_REQUEST_SEND_OPTION_SYNCHRONOUS-Flag festgelegt.

Wenn Ihr Treiber das WDF_REQUEST_SEND_OPTION_SYNCHRONOUS-Flag nicht festgelegt und die E/A-Anforderung vom Typ "Senden " erfolgreich an das E/A-Ziel sendet, gibt Send S_OK zurück, während das E/A-Ziel die E/A-Anforderung weiterhin asynchron verarbeitet. In diesem Fall stellt der Treiber eine IRequestCallbackRequestCompletion::OnCompletion-Rückruffunktion bereit, die das Framework aufruft, nachdem das E/A-Ziel die E/A-Anforderung abgeschlossen hat. In der Regel ruft die OnCompletion-RückruffunktionIWDFIoRequest::GetCompletionParams auf. Das Codebeispiel im folgenden Beispielabschnitt zeigt einen Aufruf von Senden ohne das WDF_REQUEST_SEND_OPTION_SYNCHRONOUS-Flag.

Ein Treiber kann Senden nicht aufrufen, um eine E/A-Anforderung an eine USB-Pipe zu senden, wenn der Treiber einen kontinuierlichen Reader für die Pipe konfiguriert hat.

Beispiele

Im folgenden Codebeispiel wird eine Anforderung an das E/A-Ziel eines Geräts weitergeleitet.

    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);
    }

Anforderungen

Anforderung Wert
Ende des Supports In UMDF 2.0 und höher nicht verfügbar.
Zielplattform Desktop
UMDF-Mindestversion 1.5
Kopfzeile wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Weitere Informationen

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)