Metodo IMiniportWaveRTOutputStream::SetWritePacket (portcls.h)

SetWritePacket informa il driver che il sistema operativo ha scritto dati validi nel buffer WaveRT.

Sintassi

NTSTATUS SetWritePacket(
  [in] ULONG PacketNumber,
  [in] DWORD Flags,
  [in] ULONG EosPacketLength
);

Parametri

[in] PacketNumber

Numero del pacchetto scritto dal sistema operativo nel buffer WaveRT.

[in] Flags

Attributi aggiuntivi correlati al pacchetto o al flusso.

KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM : questo flag indica che questo pacchetto rappresenta la fine del flusso di dati.

[in] EosPacketLength

Lunghezza del pacchetto EOS se KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM è specificato in Flag. Zero è un valore valido. Se KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM non viene specificato in Flags, questo parametro viene ignorato.

Valore restituito

SetWritePacket restituisce STATUS_SUCCESS se la chiamata ha avuto esito positivo. In caso contrario, la funzione restituisce un codice di stato di errore appropriato.

STATUS_DATA_LATE_ERROR: il driver restituisce questo errore se il sistema operativo passa un numero di pacchetto che è già stato trasferito o che è in corso il trasferimento. In questo caso, si è verificata una condizione di errore. Il driver può facoltativamente usare alcuni dati del pacchetto o continuare a riprodurre i dati scritti in precedenza in questo numero di pacchetto.

STATUS_DATA_OVERRUN: il driver restituisce questo errore se il sistema operativo passa un numero di pacchetto superiore a quello che può essere archiviato nel buffer WaveRT. In questo caso, si è verificata una condizione di errore. Il driver può facoltativamente ignorare i dati nel pacchetto.

STATUS_INVALID_DEVICE_STATE: il driver restituisce questo errore se il sistema operativo chiama questa routine dopo un'impostazione precedente del flag KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM.

STATUS_INVALID_PARAMETER: il driver restituisce questo errore se rileva un altro parametro non valido, a parte i casi specifici per altri stati di errore. Sono inclusi tutti i valori flag non definiti in modo specifico in precedenza.

Osservazioni

Dopo che il sistema operativo chiama questa routine, il driver può facoltativamente usare le informazioni fornite per ottimizzare il trasferimento hardware. Ad esempio, il driver potrebbe ottimizzare i trasferimenti DMA o l'hardware del programma per arrestare il trasferimento alla fine del pacchetto specificato nel caso in cui il sistema operativo non chiami di nuovo questa routine per informare il driver di un altro pacchetto. Ciò può attenuare gli effetti acustici dell'underflow, ad esempio introducendo una distanza udibile anziché ripetere un buffer circolare. Tuttavia, il driver è comunque obbligato ad aumentare il contatore dei pacchetti interno e gli eventi di notifica dei segnali a una velocità in tempo reale nominale.

Tranne quando il sistema operativo specifica il flag di KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM, le dimensioni del pacchetto sono le dimensioni del buffer WaveRT diviso per NotificationCount passato a IMiniportWaveRTStreamNotification::AllocateBufferWithNotification.

A seconda delle funzionalità hardware, se viene specificato il flag KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM, il driver può riempire in silenzio una parte del buffer WaveRT che segue il pacchetto EOS nel caso in cui l'hardware trasferisca i dati oltre la posizione EOS.

Fabbisogno

Requisito Valore
client minimo supportato Disponibile in Windows 10 e versioni successive.
piattaforma di destinazione Finestre
intestazione portcls.h
IRQL Livello passivo

Vedere anche

IMiniportWaveRTOutputStream