Поделиться через


Метод IMiniportWaveRTOutputStream::SetWritePacket (portcls.h)

SetWritePacket информирует драйвер о том, что ОС записала допустимые данные в буфер WaveRT.

Синтаксис

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

Параметры

[in] PacketNumber

Номер пакета, записанного ОС в буфер WaveRT.

[in] Flags

Дополнительные атрибуты, связанные с пакетом или потоком.

KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM — этот флаг указывает, что этот пакет представляет конец потока данных.

[in] EosPacketLength

Длина пакета EOS, если KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM указана в разделе Флаги. Ноль является допустимым значением. Если KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM не указан в разделе Флаги, этот параметр игнорируется.

Возвращаемое значение

SetWritePacket возвращает STATUS_SUCCESS, если вызов был успешным. В противном случае функция возвращает соответствующий код состояния ошибки.

STATUS_DATA_LATE_ERROR — драйвер возвращает эту ошибку, если ОС передает номер пакета, который уже передан или передается в данный момент. В этом случае произошло сбой. Драйвер может при необходимости использовать некоторые данные из пакета или продолжить воспроизведение данных, ранее записанных на этот номер пакета.

STATUS_DATA_OVERRUN — драйвер возвращает эту ошибку, если ОС передает пакет с номером, превышающим значение, которое может быть сохранено в буфере WaveRT. В этом случае произошло сбой. При необходимости драйвер может игнорировать данные в пакете.

STATUS_INVALID_DEVICE_STATE — драйвер возвращает эту ошибку, если ОС вызывает эту подпрограмму после ранее заданного флага KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM.

STATUS_INVALID_PARAMETER — драйвер возвращает эту ошибку, если он считает какой-либо другой параметр недопустимым, кроме конкретных случаев для других состояний ошибки. Сюда входят все значения флагов, которые не определены выше.

Комментарии

После того как ОС вызовет эту подпрограмму, драйвер может при необходимости использовать предоставленные сведения для оптимизации передачи оборудования. Например, драйвер может оптимизировать передачу DMA или запрограммировать оборудование, чтобы остановить передачу в конце указанного пакета, если ОС не вызовет эту подпрограмму снова, чтобы сообщить драйверу о другом пакете. Это может смягчить звуковые последствия недостаточного потока, например, ввести звуковой разрыв, а не повторять циклический буфер. Однако драйвер по-прежнему обязан увеличить свой внутренний счетчик пакетов и сообщить о событиях уведомлений в номинальном режиме реального времени.

За исключением случаев, когда ОПЕРАЦИОННая система задает флаг KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM, размер пакета равен размеру буфера WaveRT, делящемуся на значение NotificationCount, переданное в IMiniportWaveRTStreamNotification::AllocateBufferWithNotification.

В зависимости от возможностей оборудования, если указан флаг KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM, драйвер может заполнить часть буфера WaveRT, следующую за пакетом EOS, в случае, если оборудование передает данные за пределы позиции EOS.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows 10 и более поздних версиях.
Целевая платформа Windows
Header portcls.h
IRQL Пассивный уровень

См. также раздел

IMiniportWaveRTOutputStream