Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
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 и более поздних версиях. |
| целевая платформа | Виндоус |
| заголовка | portcls.h |
| IRQL | Пассивный уровень |