Freigeben über


IWDFDevice::CreateRequest-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 CreateRequest-Methode erstellt ein unformatiertes Anforderungsobjekt.

Syntax

HRESULT CreateRequest(
  [in, optional] IUnknown      *pCallbackInterface,
  [in, optional] IWDFObject    *pParentObject,
  [out]          IWDFIoRequest **ppRequest
);

Parameter

[in, optional] pCallbackInterface

Ein Zeiger auf die IUnknown-Schnittstelle , die das Framework verwendet, um die objektbezogenen Ereignisrückruffunktionen zu bestimmen, die der Treiber für das neu erstellte Anforderungsobjekt abonniert. Dieser Parameter ist optional. Der Treiber kann NULL übergeben, wenn der Treiber keine Benachrichtigung erfordert. Wenn der Treiber einen gültigen Zeiger übergibt, ruft das Framework QueryInterface auf der IUnknown-Schnittstelle für die IObjectCleanup-Schnittstelle auf. Wenn das Framework die IObjectCleanup-Schnittstelle des Treibers abruft, kann das Framework anschließend die IObjectCleanup::OnCleanup-Methode des Treibers aufrufen, um den Treiber darüber zu informieren, dass das Anforderungsobjekt bereinigt wird.

[in, optional] pParentObject

Ein Zeiger auf die IWDFObject-Schnittstelle für das übergeordnete Objekt des erstellten E/A-Anforderungsobjekts. Bei NULL wird das Geräteobjekt zum übergeordneten Standardobjekt.

[out] ppRequest

Ein Zeiger auf eine Variable, die einen Zeiger auf die IWDFIoRequest-Schnittstelle für das neue Anforderungsobjekt empfängt.

Rückgabewert

CreateRequest 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.

Hinweise

Bevor ein UMDF-Treiber das Von CreateRequest erstellte Anforderungsobjekt verwendet, muss der Treiber das Anforderungsobjekt formatieren. Um ein E/A-Anforderungsobjekt zu formatieren, ruft der Treiber eine der folgenden Methoden auf:

Wenn ein Treiber CreateRequest aufruft, um ein Anforderungsobjekt zu erstellen, darf er nicht IWDFIoRequest::Complete für das Anforderungsobjekt aufrufen. Stattdessen muss der Treiber IWDFObject::D eleteWdfObject aufrufen, wenn er die Verwendung des Anforderungsobjekts abgeschlossen hat. Weitere Informationen finden Sie unter Abschließen von E/A-Anforderungen.

Wenn NULL im pParentObject-Parameter angegeben ist, wird das Geräteobjekt zum übergeordneten Standardobjekt für das neu erstellte E/A-Anforderungsobjekt. Wenn ein UMDF-Treiber ein E/A-Anforderungsobjekt erstellt, das der Treiber mit einem bestimmten E/A-Warteschlangenobjekt oder einem anderen E/A-Anforderungsobjekt verwendet, sollte der Treiber dieses Warteschlangen- oder Anforderungsobjekt als übergeordnetes Objekt des erstellten Anforderungsobjekts festlegen. Wenn das übergeordnete Objekt gelöscht wird, wird das erstellte Anforderungsobjekt gelöscht.

Beispiele

Das folgende Codebeispiel zeigt, wie Sie eine Anforderung erstellen, die Anforderung zum Lesen formatieren und die Anforderung senden.

HRESULT
CUmdfHidDevice::SendInterruptPipeRead(
    VOID
    )
{
    CComPtr<IWDFDevice> wdfDevice;

    HRESULT hr;

    IWDFFile *pTargetFile = NULL;

    // Allocate a new WDF request to send on the interrupt pipe.
    GetWdfDevice(&wdfDevice);
    hr = wdfDevice->CreateRequest(
                                  static_cast<IObjectCleanup*>(this), 
                                  wdfDevice, 
                                  &m_InterruptReadRequest
                                  );

    if (SUCCEEDED(hr))
    {
        m_InterruptPipe->GetTargetFile(&pTargetFile);
        hr = m_InterruptPipe->FormatRequestForRead(
                                                   m_InterruptReadRequest,
                                                   pTargetFile,
                                                   m_ReadMemory,
                                                   NULL,
                                                   NULL
                                                   );
    }

    // Issue the read to the pipe.
    if (SUCCEEDED(hr))
    {
        hr = m_InterruptReadRequest->Send(m_InterruptPipe, 0, 0);
    }

    return hr;
}

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

IWDFDevice

IWDFIoRequest

IWDFIoTarget::FormatRequestForIoctl

IWDFIoTarget::FormatRequestForRead

IWDFIoTarget::FormatRequestForWrite

IWDFObject