IWDFIoRequest2::RetrieveInputMemory-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. Es werden keine neuen Features zu UMDF 1 hinzugefügt, und es gibt eingeschränkte Unterstützung für UMDF 1 für neuere Versionen von Windows 10. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF-.]
Die RetrieveInputMemory Methode ruft die IWDFMemory Schnittstelle eines Frameworkspeicherobjekts ab, das den Eingabepuffer einer E/A-Anforderung darstellt.
Syntax
HRESULT RetrieveInputMemory(
[out] IWDFMemory **Memory
);
Parameter
[out] Memory
Die Adresse eines Speicherorts, der einen Zeiger auf das IWDFMemory Schnittstelle eines UMDF-Speicherobjekts empfängt.
Rückgabewert
RetrieveInputMemory- gibt S_OK zurück, wenn der Vorgang erfolgreich ist. Andernfalls kann diese Methode den folgenden Wert zurückgeben:
Rückgabecode | Beschreibung |
---|---|
|
Die E/A-Anforderung hat keinen Ausgabepuffer bereitgestellt. |
|
Nicht genügend Arbeitsspeicher zum Abrufen des Puffers verfügbar. Der Treiber sollte die Anforderung mit einem Fehlerstatuswert abschließen. |
Diese Methode gibt möglicherweise einen der anderen Werte zurück, die Winerror.h enthält.
Bemerkungen
Der Eingabepuffer einer Anforderung enthält Informationen, z. B. Daten, die auf einen Datenträger geschrieben werden sollen, den der Absender der bereitgestellten Anforderung. Ihr Treiber kann RetrieveInputMemory- aufrufen, um den Eingabepuffer für eine Schreibanforderung oder eine Geräte-E/A-Steuerelementanforderung abzurufen, aber nicht für eine Leseanforderung (da Leseanforderungen keine Eingabedaten bereitstellen).
Die RetrieveInputMemory Methode ruft den Eingabepuffer für E/A-Anforderungen ab, die die gepufferten E/A- oder direkten E/A--Methode für den Zugriff auf Datenpuffer verwenden.
Wenn RetrieveInputMemory- S_OK zurückgibt, empfängt der Treiber einen Zeiger auf die IWDFMemory Schnittstelle eines UMDF-Speicherobjekts, das den Eingabepuffer darstellt. Um auf den Puffer zuzugreifen, muss der Treiber IWDFMemory::GetDataBufferaufrufen.
Der Treiber kann auf das abgerufene Framework-Speicherobjekt zugreifen, bis es der E/A-Anforderung abgeschlossen ist. Bevor der Treiber die E/A-Anforderung abgeschlossen hat, muss er IWDFMemory::Releaseaufrufen.
Anstatt RetrieveInputMemory-aufzurufen, kann der Treiber IWDFIoRequest2::RetrieveInputBufferaufrufen, wodurch die Adresse und Länge des Puffers abgerufen wird.
Weitere Informationen zum Zugreifen auf die Datenpuffer einer E/A-Anforderung finden Sie unter Zugreifen auf Datenpuffer in UMDF-Based Drivers.
Beispiele
Das folgende Codebeispiel zeigt, wie eine IQueueCallbackWrite::OnWrite Rückruffunktion die IWDFMemory Schnittstelle des Framework-Speicherobjekts abrufen kann, das den Eingabepuffer einer Schreibanforderung darstellt. Anschließend wird die Schreibanforderung an ein USB-E/A-Ziel formatiert und gesendet.
VOID
STDMETHODCALLTYPE
CMyQueue::OnWrite(
__in IWDFIoQueue *pWdfQueue,
__in IWDFIoRequest *pWdfRequest,
__in SIZE_T BytesToWrite
)
{
HRESULT hr = S_OK;
IWDFMemory * pInputMemory = NULL;
IWDFUsbTargetPipe * pOutputPipe = m_Device->GetOutputPipe();
//
// Declare an IWDFIoRequest2 interface pointer and obtain the
// IWDFIoRequest2 interface from the IWDFIoRequest interface.
//
CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;
hr = r2->RetrieveInputMemory(&pInputMemory);
if (FAILED(hr)) goto Exit;
hr = pOutputPipe->FormatRequestForWrite(
pWdfRequest,
NULL, //pFile
pInputMemory,
NULL, //Memory offset
NULL //DeviceOffset
);
Exit:
if (FAILED(hr))
{
pWdfRequest->Complete(hr);
}
else
{
ForwardFormattedRequest(pWdfRequest, pOutputPipe);
}
SAFE_RELEASE(pInputMemory);
return;
}
Anforderungen
Anforderung | Wert |
---|---|
Ende des Supports | In UMDF 2.0 und höher nicht verfügbar. |
Zielplattform- | Desktop |
Mindest-UMDF-Version | 1.9 |
Header- | wudfddi.h (include Wudfddi.h) |
DLL- | WUDFx.dll |
Siehe auch
IWDFIoRequest2::RetrieveInputBuffer
IWDFIoRequest2::RetrieveOutputBuffer