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 |