Freigeben über


IWDFDevice::CreateIoQueue-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 CreateIoQueue Methode konfiguriert die Standard-E/A-Warteschlange, die einem Gerät zugeordnet ist, oder erstellt eine sekundäre E/A-Warteschlange für das Gerät.

Syntax

HRESULT CreateIoQueue(
  [in, optional] IUnknown                   *pCallbackInterface,
  [in]           BOOL                       bDefaultQueue,
  [in]           WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
  [in]           BOOL                       bPowerManaged,
  [in]           BOOL                       bAllowZeroLengthRequests,
  [out]          IWDFIoQueue                **ppIoQueue
);

Parameter

[in, optional] pCallbackInterface

Ein Zeiger auf die IUnknown Schnittstelle, die das Framework verwendet, um die Ereignisrückruffunktionen zu bestimmen, die der Treiber in der Warteschlange abonniert. Dies sind die Funktionen, die das Framework aufruft, wenn die relevanten Ereignisse auftreten.

Für UMDF-Versionen 1.9 und höher ist dieser Parameter für E/A-Warteschlangen erforderlich, die die sequenzielle oder parallele Dispatching-Methode, verwenden und optional (kann NULL-) für E/A-Warteschlangen sein, die die manuelle Verteilermethode verwenden. Für UMDF-Versionen vor 1.9 ist dieser Parameter für alle Verteilermethoden erforderlich.

[in] bDefaultQueue

Ein BOOL-Wert, der angibt, ob die Standard-E/A-Warteschlange konfiguriert oder eine sekundäre E/A-Warteschlange für das Gerät erstellt werden soll. TRUE gibt an, dass die Standard-E/A-Warteschlange konfiguriert wird; FALSE- gibt an, dass eine sekundäre E/A-Warteschlange erstellt wird.

[in] DispatchType

Ein WDF_IO_QUEUE_DISPATCH_TYPE-typed-Wert, der angibt, wie der Treiber Anforderungen aus der E/A-Warteschlange empfangen muss.

[in] bPowerManaged

Ein BOOL-Wert, der angibt, ob die E/A-Warteschlange energieverwaltet ist. TRUE gibt an, dass das Framework die Verteilerfunktion für die E/A-Warteschlange automatisch mit Plug and Play (PnP) und dem Leistungszustand des Geräts koordiniert; FALSCH- gibt keine automatisch koordinierte Verteilerung an.

[in] bAllowZeroLengthRequests

Ein BOOL-Wert, der angibt, ob das Framework E/A-Anforderungen der Länge null direkt in der E/A-Warteschlange platziert, damit der Treiber verarbeitet werden kann. TRUE- gibt an, dass der Treiber Lese- und Schreibanforderungen empfangen soll, die über Puffer der Länge null verfügen, d. h., das Framework fügt diese Anforderungstypen automatisch direkt in die E/A-Warteschlange für den Treiber ein. FALSE gibt an, dass das Framework leere E/A-Anforderungen abschließt, anstatt sie in die E/A-Warteschlange einzufügen.

[out] ppIoQueue

Ein Zeiger auf eine Variable, die einen Zeiger auf die IWDFIoQueue Schnittstelle für das neu erstellte E/A-Warteschlangenobjekt oder das Standard-E/A-Warteschlangenobjekt empfängt.

Rückgabewert

CreateIoQueue gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK
Die E/A-Warteschlange wurde erfolgreich erstellt.
HRESULT_FROM_WIN32(ERROR_BAD_CONFIGURATION)
Die E/A-Warteschlange ist auf eine der folgenden Arten konfiguriert:
  • Der parameter DispatchType gibt eine nichtmanuale Warteschlange und keine der im Abschnitt "Hinweise" angegebenen I/O-Warteschlangenrückrufschnittstellen durch den pCallbackInterface-Parameter unterstützt.
  • Der parameter DispatchType gibt eine manuelle Warteschlange und mindestens eine der im Abschnitt "Hinweise" angegebenen I/O-Warteschlangenrückrufschnittstellen durch den pCallbackInterface Parameter unterstützt.
Weitere Informationen zu diesen Konfigurationen finden Sie im Abschnitt "Hinweise".
 

CreateIoQueue- können auch andere HRESULT-Werte zurückgeben.

Bemerkungen

Die IUnknown Schnittstelle, die der Treiber für die pCallbackInterface Parameter bereitstellt, kann mehrere Warteschlangenrückruffunktionen unterstützen. Das Framework ruft die QueryInterface-Methode auf der bereitgestellten IUnknown--Schnittstelle mehrmals auf, um die vom Treiber unterstützten Schnittstellenmethoden abzurufen. Wenn Anwendungen Aktionen ausführen, die sich auf die Methoden der unterstützten Schnittstellen beziehen (z. B. eine E/A-Leseanforderung), ruft das Framework die Methoden auf (z. B. die IQueueCallbackRead::OnRead-Methode), um den Treiber zu benachrichtigen. Das Framework ruft QueryInterface- für die folgenden Schnittstellen auf:

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackRead-

IQueueCallbackWrite

Wenn der Treiber entweder WdfIoQueueDispatchSequential oder WdfIoQueueDispatchParallel für den parameter DispatchType von CreateIoQueue, um eine nichtmanuale Warteschlange zu erstellen, CreateIoQueue- kann S_OK nur zurückgeben, wenn das Rückrufobjekt des Treibers mindestens eine der vorherigen Schnittstellen implementiert und die Unterstützung solcher Schnittstellen über die IUnknown Schnittstelle angibt, auf die pCallbackInterface pCallbackInterface verweist.

Wenn der Treiber WdfIoQueueDispatchManual für DispatchType zum Erstellen einer manuellen Warteschlange übergibt, kann CreateIoQueue- nur S_OK zurückgeben, wenn das Warteschlangenrückrufobjekt des Treibers keines der vorherigen Rückrufschnittstellen implementiert oder angibt. Weitere Informationen zu den Rückrufobjekten des Treibers finden Sie unter Erstellen von Rückrufobjekten.

Hinweis Der Treiber kann nicht dasselbe Rückrufobjekt für eine manuelle Warteschlange verwenden, die der Treiber für eine sequenzielle oder parallele Warteschlange verwendet. Das heißt, wenn der Treiber einen bestimmten Zeiger an eine IUnknown Schnittstelle in einem Aufruf von CreateIoQueue zum Erstellen einer manuellen Warteschlange übergibt, kann der Treiber den identischen Zeiger nicht später an IUnknown in einem Aufruf an CreateIoQueue übergeben, um eine sequenzielle oder parallele Warteschlange zu erstellen.
 
Weitere Informationen zum Konfigurieren des Verteilermodus finden Sie unter Konfigurieren des Verteilermodus für eine E/A-Warteschlange.

Das Framework ruft auch QueryInterface- auf der bereitgestellten IUnknown--Schnittstelle auf, um festzustellen, ob der Treiber eine der folgenden Schnittstellen unterstützt:

IObjectCleanup-

IQueueCallbackIoResume

IQueueCallbackIoStop

Das Framework ruft auch QueryInterface- für die bereitgestellte IUnknown--Schnittstelle auf, um festzustellen, ob der Treiber die IQueueCallbackStateChange--Schnittstelle unterstützt. Das Rückrufobjekt der Treiberwarteschlange kann optional implementieren und angeben, dass IQueueCallbackStateChange nur für eine manuelle Warteschlange unterstützt wird. Das Rückrufobjekt der Treiberwarteschlange darf nicht implementiert werden und gibt die Unterstützung von IQueueCallbackStateChange für eine sequenzielle oder parallele Warteschlange an.

Beispiele

Ein Codebeispiel für die Verwendung der CreateIoQueue--Methode finden Sie unter IWDFDriver::CreateDevice.

Anforderungen

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

Siehe auch

IObjectCleanup-

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackIoResume

IQueueCallbackIoStop

IQueueCallbackRead-

IQueueCallbackStateChange

IQueueCallbackWrite

IWDFDevice-

IWDFIoQueue

WDF_IO_QUEUE_DISPATCH_TYPE