Freigeben über


IMiniportWavePci::NewStream-Methode (portcls.h)

Die NewStream-Methode erstellt eine neue Instanz eines logischen Datenstroms, der einem angegebenen physischen Kanal zugeordnet ist.

Syntax

NTSTATUS NewStream(
  [out]          PMINIPORTWAVEPCISTREAM *Stream,
  [in, optional] PUNKNOWN               OuterUnknown,
  [in]           POOL_TYPE              PoolType,
  [in]           PPORTWAVEPCISTREAM     PortStream,
  [in]           ULONG                  Pin,
  [in]           BOOLEAN                Capture,
  [in]           PKSDATAFORMAT          DataFormat,
  [out]          PDMACHANNEL            *DmaChannel,
  [out]          PSERVICEGROUP          *ServiceGroup
);

Parameter

[out] Stream

Ausgabezeiger für den neuen Datenstrom. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene Zeigervariable, in die die Methode einen Zeiger auf die IMiniportWavePciStream Schnittstelle des Datenstromobjekts schreibt. Der Aufrufer gibt einen gültigen, nichtNULL- Zeiger für diesen Parameter an.

[in, optional] OuterUnknown

Zeigen Sie auf die IUnknown Schnittstelle eines Objekts, das das Datenstromobjekt aggregieren muss. Dieser Parameter ist optional. Wenn keine Aggregation erforderlich ist, gibt der Aufrufer diesen Parameter als NULL-an.

[in] PoolType

Gibt den Typ des Speicherpools an, von dem der Speicher für das DMA-Kanalobjekt zugewiesen werden soll. Dieser Parameter ist einer der nicht seitenseitigen Pooltypen, die in der POOL_TYPE-Aufzählung definiert sind.

[in] PortStream

Zeiger auf die IPortWavePciStream Schnittstelle des Streamobjekts des Porttreibers.

[in] Pin

Gibt eine Pin-ID an, die die pin identifiziert, die geöffnet werden soll. Wenn der WavePci miniport-Treiberfilterdeskriptor eine Summe von n Pin-Fabriken für den Filter angibt, sind gültige Werte für Parameter Pin liegen im Bereich 0 bis n-1.

[in] Capture

Gibt an, ob ein Aufnahmedatenstrom oder ein Renderdatenstrom erstellt werden soll. Dieser Parameter ist TRUE- für einen Aufnahmekanal (Eingabekanal) und FALSE- für einen Wiedergabekanal (Ausgabekanal).

[in] DataFormat

Zeigen Sie auf eine KSDATAFORMAT- Struktur, die das Datenformat des Datenstroms angibt.

[out] DmaChannel

Ausgabezeiger für den DMA-Kanal. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene Zeigervariable, in die die Methode einen Zeiger auf das IDmaChannel- -Objekt des Datenstroms schreibt. Der Aufrufer gibt einen gültigen, nichtNULL- Zeiger für diesen Parameter an.

[out] ServiceGroup

Ausgabezeiger für die Dienstgruppe. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene Zeigervariable, in die die Methode einen Zeiger auf die IServiceGroup- Schnittstelle des Dienstgruppenobjekts des Datenstroms schreibt. Dies ist die Dienstgruppe, die für die Unterbrechungsbenachrichtigung registriert wird. Der Aufrufer gibt einen gültigen, nichtNULL- Zeiger für diesen Parameter an.

Rückgabewert

NewStream gibt STATUS_SUCCESS zurück, wenn der Anruf erfolgreich war. Andernfalls gibt die Methode einen geeigneten Fehlercode zurück.

Bemerkungen

Die NewStream-Methode legt den Anfangszustand des Datenstroms auf KSSTATE_STOP und seine Anfangsposition auf Null fest. (Siehe IMiniportWavePciStream::SetState und IMiniportWavePciStream::GetPosition.)

Der parameter DataFormat, der das Datenformat des Datenstroms angibt, verweist auf eine der folgenden audiospezifischen, erweiterten Versionen der KSDATAFORMAT Struktur:

KSDATAFORMAT_WAVEFORMATEX

KSDATAFORMAT_DSOUND

Wenn der Miniporttreiber keinen Dienstgruppenzeiger bereitstellt (d. h., wenn die NewStream Aufrufausgabe NULL über den ServiceGroup Zeiger erfolgt), richtet der Porttreiber stattdessen einen eigenen periodischen Timer für die Verarbeitung von Datenstrompositions- und Taktereignissen ein. Der Zeitraum für diesen Timer beträgt derzeit 20 Millisekunden, aber der Zeitraum kann sich in zukünftigen Implementierungen ändern.

Die parameter Stream, OuterUnknown, PortStreamund ServiceGroup Parameter folgen den Referenzzählungskonventionen für COM-Objekte.

Beachten Sie, dass NewStream nicht den üblichen Referenzzählungskonventionen bei der Verarbeitung des Zeigers entspricht, der über den DmaChannel OUT-Parameter ausgegeben wird. Wenn der Porttreiber die Verweise verwendet, die er über die anderen OUT-Parameter der NewStream Methode empfängt, Stream und ServiceGroup-, gibt er sie wie erwartet frei. Im Gegensatz dazu verwendet der Porttreiber niemals den DmaChannel Zeiger, den er vom NewStream Aufruf empfängt, und ruft nie Release- für das DmaChannel--Objekt auf.

Der Ac97-Beispielaudiotreiber im Microsoft Windows Driver Kit (WDK) spiegelt dieses Verhalten wider. Die Implementierung der IMiniportWavePci::NewStream-Methode ruft AddRef- für die Stream- auf und ServiceGroup verweise darauf, dass sie ausgegeben wird, aber nicht den DmaChannel- Verweis. Dieses Verhalten wird aus Gründen der Abwärtskompatibilität beibehalten.

Beachten Sie, dass die NewStream Methoden für die anderen Porttypen (Insbesondere WaveCyclic) den üblichen Referenzzählungskonventionen für alle ihre OUT-Parameter folgen.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- portcls.h (include Portcls.h)
IRQL- PASSIVE_LEVEL

Siehe auch

IDmaChannel

IMiniportWavePci

IMiniportWavePciStream-

IPortWavePciStream-

IServiceGroup-

KSDATAFORMAT-

KSDATAFORMAT_DSOUND

KSDATAFORMAT_WAVEFORMATEX

POOL_TYPE