SRB_OPEN_STREAM

Der Klassentreiber sendet diese Anforderung, um einen Stream zu öffnen.

Rückgabewert

Der Minitreiber sollte eine der folgenden Optionen als status im SRB festlegen:

STATUS_SUCCESS
Gibt den erfolgreichen Abschluss des Befehls an.

STATUS_NOT_IMPLEMENTED
Gibt an, dass die Funktion vom Minitreiber nicht unterstützt wird.

STATUS_TOO_MANY_NODES
Gibt an, dass nicht genügend Ressourcen vorhanden sind, um diesen Stream zu öffnen.

STATUS_IO_DEVICE_ERROR
Gibt an, dass ein Hardwarefehler aufgetreten ist.

Kommentare

Der Klassentreiber stellt einen HW_STREAM_OBJECT Puffer in pSrb-StreamObject> bereit, wobei pSrb-StreamObject-StreamNumber>> auf die Nummer des zu öffnenden Streams festgelegt ist. Der pSrb-Zeiger zeigt auf eine HW_STREAM_REQUEST_BLOCK-Struktur . StreamNumber entspricht dem Offset des Datenstroms innerhalb der HW_STREAM_DESCRIPTOR Struktur, die der Minitreiber als Reaktion auf eine SRB_GET_STREAM_INFO-Anforderung bereitstellt. Der Klassentreiber gibt das Datenformat an, das der geöffnete Stream in pSrb-CommandData-OpenFormat>> bereitstellen soll.

Wenn der Minidriver diese Anforderung empfängt, sollte ermittelt werden, ob der angegebene Stream zu diesem Zeitpunkt geöffnet werden kann. Der Minidriver sollte auch das übergebene KSDATAFORMAT-Format überprüfen. das OpenFormat-Feld des SRB. Wenn der Stream geöffnet werden kann, aktualisiert der Minitreiber die HW_STREAM_OBJECT-Struktur und gibt STATUS_SUCCESS zurück. Wenn die maximale Anzahl von Streaminstanzen bereits geöffnet ist oder die zum Öffnen dieses Datenstroms erforderlichen Hardwareressourcen nicht verfügbar sind, gibt der Minitreiber einen entsprechenden Fehler status zurück.

Wenn der befehl SRB_OPEN_STREAM vom Minidriver empfangen wird, sollte der Minitreiber Folgendes ausführen:

  1. Überprüfen Sie, ob die maximale Anzahl von Streaminstanzen nicht überschritten wurde und dass der Wert des Streamindexes gültig ist.

  2. Überprüfen Sie, ob das angeforderte Datenformat für diesen Stream gültig ist.

  3. Legen Sie das Format für den Stream fest.

  4. Verwalten Sie ein Array aller Datenstromerweiterungsstrukturen in der Geräteerweiterung, damit IRPs von jedem Stream abgebrochen werden können.

  5. Geben Sie im Streamobjekt Zeiger auf die Streamdatenhandler und Steuerelementhandler an.

  6. Legen Sie das DMA-Flag im Streamobjekt fest, wenn das Gerät DMA direkt an die Datenpufferadressen ausführt, die an die ReceiveDataPacket-Routinen übergeben werden. Wenn der Treiber mit logischer Adressierung auf übergebene Datenpuffer zugreift, legen Sie auch das PIO-Flag im Streamobjekt fest.

  7. Wenn die Uhrunterstützung für den Stream verfügbar ist, geben Sie dies über den HwClockObject-Member im Streamobjekt an.