IMiniportWaveRTOutputStream::GetPacketCount-Methode (portcls.h)
GetPacketCount gibt die (1-basierte) Anzahl von Paketen zurück, die vollständig aus dem 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 aus dem WaveRT-Puffer in die Hardware übertragen wurden.
Rückgabewert
GetPacketCount
gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich war. Andernfalls gibt die Funktion einen entsprechenden Fehler status Code zurück.
Hinweise
Aus der Paketanzahl kann das Betriebssystem die Streamposition der Pakete ableiten, die es in den WaveRT-Puffer schreibt. Das Betriebssystem kann auch die WaveRT-Pufferposition des nächsten Pakets zum Schreiben innerhalb des WaveRT-Puffers ableiten. Bei WaveRT-Treibern signalisiert der Treiber ein einzelnes Benachrichtigungsereignis, während er 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 Unterflussfällen lässt sich die Korrektur leichter erreichen, indem die Paketanzahl abfragt, aus der das Betriebssystem bestimmen kann, welches Paket als Nächstes geschrieben werden soll.
Der zurückgegebene PacketCount gibt die (1-basierte) Anzahl der Pakete an, die vollständig aus dem WaveRT-Puffer in die Hardware übertragen wurden. Dadurch kann das Betriebssystem die 0-basierte Anzahl des Pakets ermitteln, das derzeit übertragen wird, und sicherstellen, dass es vor dieses Paket schreibt. Wenn die Paketanzahl beispielsweise 5 ist, wurden 5 Pakete vollständig übertragen. Das heißt, pakete 0-4 wurden vollständig übertragen. Aus diesem Grund wird Paket 5 ausgeführt, und das Betriebssystem sollte Paket 6 schreiben. Wenn die Benachrichtigungsanzahl für den WaveRT-Puffer 2 ist, befindet sich Paket 6 beim Offset 0 innerhalb des WaveRT-Puffers (da 6 modulo 2 0 und 0 mal die Paketgröße 0 ist).
Das Betriebssystem kann diese Eigenschaft jederzeit erhalten. Diese Eigenschaft wird jedoch in der Regel nur in regelmäßigen Abständen abgerufen, oder nachdem der Treiber einen Dataflowfehler (STATUS_DATA_LATE_ERROR, STATUS_DATA_OVERRUN) von SetWritePacket() zurückgibt, um eine erneute Synchronisierung mit dem Treiber zu erzielen.
Der Treiber sollte die Paketanzahl auf 0 zurücksetzen, wenn sich der Stream in KSSTATE_STOP befindet.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar in Windows 10 und höher. |
Zielplattform | Windows |
Kopfzeile | portcls.h |
IRQL | Passive Ebene |