Freigeben über


IMiniportWaveRTOutputStream::GetPacketCount-Methode (portcls.h)

GetPacketCount gibt die (1-basierte) Anzahl von Paketen zurück, die vollständig vom WaveRT-Puffer in die Hardware übertragen wurden.

Syntax

NTSTATUS GetPacketCount(
  [out] ULONG *pPacketCount
);

Parameter

[out] pPacketCount

pPacketCount gibt die Anzahl der Pakete zurück, die vollständig vom WaveRT-Puffer in die Hardware übertragen wurden.

Rückgabewert

GetPacketCount gibt STATUS_SUCCESS zurück, wenn der Anruf erfolgreich war. Andernfalls gibt die Funktion einen entsprechenden Fehlerstatuscode zurück.

Bemerkungen

Aus der Paketanzahl kann das Betriebssystem die Streamposition der Pakete ableiten, die er in den WaveRT-Puffer schreibt. Das Betriebssystem kann auch die WaveRT-Pufferposition des nächsten Pakets ableiten, das innerhalb des WaveRT-Puffers geschrieben werden soll. Bei WaveRT-Treibern signalisiert der Treiber ein einzelnes Benachrichtigungsereignis, da es Daten aus jedem Paket des WaveRT-Puffers überträgt. Daher kann das Ereignis allein nicht angeben, welches Paket innerhalb des WaveRT-Puffers übertragen wird. Im normalen Betrieb ist dies kein Problem, aber in Unterlauffällen wird die Korrektur einfacher durch Abfragen der Paketanzahl erreicht, aus der das Betriebssystem bestimmen kann, welches Paket als Nächstes geschrieben werden soll.

Der zurückgegebene PacketCount gibt die (1-basierte) Anzahl von Paketen an, die vollständig vom WaveRT-Puffer in die Hardware übertragen wurden. Aus diesem Grund kann das Betriebssystem die 0-basierte Anzahl des Pakets ermitteln, das derzeit übertragen wird, und sicherstellen, dass es vor diesem Paket schreibt. Wenn die Paketanzahl beispielsweise 5 ist, werden 5 Pakete vollständig übertragen. Das heißt, Pakete 0-4 wurden vollständig übertragen. Daher wird Paket 5 ausgeführt, und das Betriebssystem sollte Paket 6 schreiben. Wenn die Benachrichtigungsanzahl für den WaveRT-Puffer 2 ist, liegt paket 6 im WaveRT-Puffer bei Offset 0 (da 6 Modulo 2 0 und 0 Mal die Paketgröße 0 ist).

Das Betriebssystem kann diese Eigenschaft jederzeit abrufen. Diese Eigenschaft wird jedoch in der Regel nur in regelmäßigen Abständen abgerufen oder nachdem der Treiber einen Datenflussfehler (STATUS_DATA_LATE_ERROR, STATUS_DATA_OVERRUN) von SetWritePacket() zurückgibt, um die Synchronisierung mit dem Treiber erneut durchzuführen.

Der Treiber sollte die Paketanzahl auf 0 zurücksetzen, wenn sich der Datenstrom in KSSTATE_STOP befindet.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows 10 und höher.
Zielplattform- Fenster
Header- portcls.h
IRQL- Passive Ebene

Siehe auch

IMiniportWaveRTOutputStream-