Freigeben über


IWDFIoRequest2::RetrieveInputBuffer-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 RequestRetrieveInputBuffer-Methode ruft den Eingabepuffer einer E/A-Anforderung ab.

Syntax

HRESULT RetrieveInputBuffer(
  [in]            SIZE_T MinimumRequiredCb,
  [out]           PVOID  *Buffer,
  [out, optional] SIZE_T *BufferCb
);

Parameter

[in] MinimumRequiredCb

Die minimale Puffergröße in Bytes, die der Treiber zum Verarbeiten der E/A-Anforderung benötigt. Dieser Wert kann 0 sein, wenn keine Mindestpuffergröße vorhanden ist.

[out] Buffer

Ein Zeiger auf eine Position, die die Adresse des Puffers empfängt.

[out, optional] BufferCb

Ein Zeiger auf einen Speicherort, der die Größe des Puffers in Bytes empfängt. Dieser Parameter ist optional und kann NULL sein.

Rückgabewert

RequestRetrieveInputBuffer gibt S_OK zurück, wenn der Vorgang erfolgreich ist. Andernfalls kann diese Methode den folgenden Wert zurückgeben:

Rückgabecode Beschreibung
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
Die E/A-Anforderung hat keinen Eingabepuffer bereitgestellt, oder die Größe des Eingabepuffers ist kleiner als die Mindestgröße, die MinimumRequiredCb angibt.
E_OUTOFMEMORY
Zum Abrufen des Puffers ist nicht genügend Arbeitsspeicher verfügbar. Der Treiber sollte die Anforderung mit einem Fehler status Wert abschließen.
 

Diese Methode gibt möglicherweise einen der anderen Werte zurück, die Winerror.h enthält.

Hinweise

Der Eingabepuffer einer Anforderung enthält Informationen, z. B. Daten, die auf einen Datenträger geschrieben werden sollen, die vom Absender der anforderung bereitgestellt werden. Ihr Treiber kann RequestRetrieveInputBuffer aufrufen, um den Eingabepuffer für eine Schreibanforderung oder eine Geräte-E/A-Steuerungsanforderung abzurufen, aber nicht für eine Leseanforderung (da Leseanforderungen keine Eingabedaten bereitstellen).

Die RequestRetrieveInputBuffer-Methode ruft den Eingabepuffer für E/A-Anforderungen ab, die die gepufferte E/A - oder direkte E/A-Methode für den Zugriff auf Datenpuffer verwenden.

Wenn RequestRetrieveInputBuffer S_OK zurückgibt, erhält der Treiber die Adresse und optional die Größe des Eingabepuffers.

Der Treiber kann auf den abgerufenen Puffer zugreifen, bis er die E/A-Anforderung abgeschlossen hat.

Anstatt RequestRetrieveInputBuffer aufzurufen, kann der Treiber IWDFIoRequest2::RetrieveInputMemory aufrufen, wodurch ein Frameworkspeicherobjekt erstellt wird, das den Puffer darstellt.

Weitere Informationen zum Zugreifen auf die Datenpuffer einer E/A-Anforderung finden Sie unter Zugreifen auf Datenpuffer in UMDF-Based-Treibern.

Beispiele

Das folgende Codebeispiel zeigt ein Segment der Rückruffunktion IQueueCallbackDeviceIoControl::OnDeviceIoControl eines Seriellen Porttreibers. Aus dem Eingabepuffer einer E/A-Anforderung ruft das Codesegment die Baudrate ab, die für das Gerät festgelegt werden soll.

VOID
STDMETHODCALLTYPE
  CMyQueue::OnDeviceIoControl(
    __in IWDFIoQueue*  FxQueue,
    __in IWDFIoRequest*  FxRequest,
    __in ULONG  ControlCode,
    __in SIZE_T  InputBufferCb,
    __in SIZE_T  OutputBufferCb
    )
{
    PBYTE buffer;
    SIZE_T bufferSize;
    HRESULT hr;
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = FxRequest;

    switch (ControlCode)
    {
        case IOCTL_SERIAL_SET_BAUD_RATE: 
        {
            //
            // Obtain the baud rate from the write request's input buffer.
            //
            hr = r2->RetrieveInputBuffer(sizeof(SERIAL_BAUD_RATE),
                                         (PVOID*) &buffer, 
                                         &bufferSize);
...
        }
    }
}

Anforderungen

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

Weitere Informationen

IWDFIoRequest2

IWDFIoRequest2::RetrieveInputMemory

IWDFIoRequest2::RetrieveOutputBuffer

IWDFIoRequest2::RetrieveOutputMemory

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory