Метод IMiniportWavePci::NewStream (portcls.h)

Метод NewStream создает новый экземпляр логического потока, связанного с указанным физическим каналом.

Синтаксис

NTSTATUS NewStream(
  [out]          PMINIPORTWAVEPCISTREAM *Stream,
  [in, optional] PUNKNOWN               OuterUnknown,
  [in]           POOL_TYPE              PoolType,
  [in]           PPORTWAVEPCISTREAM     PortStream,
  [in]           ULONG                  Pin,
  [in]           BOOLEAN                Capture,
  [in]           PKSDATAFORMAT          DataFormat,
  [out]          PDMACHANNEL            *DmaChannel,
  [out]          PSERVICEGROUP          *ServiceGroup
);

Параметры

[out] Stream

Указатель вывода для нового потока. Этот параметр указывает на переменную указателя, выделенную вызывающим объектом, в которую метод записывает указатель на интерфейс объекта потока IMiniportWavePciStream. Вызывающий объект задает допустимый указатель, отличный отNULL для этого параметра.

[in, optional] OuterUnknown

Указатель на интерфейс IUnknown объекта, который должен агрегировать объект потока. Этот параметр является необязательным. Если агрегирование не требуется, вызывающий параметр указывает этот параметр как NULL.

[in] PoolType

Указывает тип пула памяти, из которого следует выделить хранилище для объекта DMA-channel. Этот параметр будет одним из типов непагированных пулов, определенных в перечислении POOL_TYPE.

[in] PortStream

Указатель на интерфейс IPortWavePciStream объекта потока драйвера порта.

[in] Pin

Указывает идентификатор пин-кода, определяющий открытый пин-код. Если дескриптор дескриптора фильтра драйвера WavePci указывает общее количество n n заводов закреплений в фильтре, допустимые значения для параметра Закрепление находятся в диапазоне от 0 до n-1.

[in] Capture

Указывает, следует ли создавать поток записи или поток отрисовки. Этот параметр TRUE для канала записи (входных данных) и FALSE для канала воспроизведения (выходных данных).

[in] DataFormat

Указатель на структуру KSDATAFORMAT, указывающую формат данных потока.

[out] DmaChannel

Указатель вывода для канала DMA. Этот параметр указывает на переменную указателя, выделенную вызывающим объектом, в которую метод записывает указатель на объект потока IDmaChannel. Вызывающий объект задает допустимый указатель, отличный отNULL для этого параметра.

[out] ServiceGroup

Указатель вывода для группы служб. Этот параметр указывает на переменную вызываемого указателя, в которую метод записывает указатель на интерфейс IServiceGroup объекта группы служб потока. Это группа служб, зарегистрированная для уведомления о прерывании. Вызывающий объект задает допустимый указатель, отличный отNULL для этого параметра.

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

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

Замечания

Метод NewStream задает начальное состояние потока на KSSTATE_STOP и его начальное положение равно нулю. (См. IMiniportWavePciStream::SetState и IMiniportWavePciStream::GetPosition.)

Параметр dataFormat, указывающий формат данных потока, указывает на одну из следующих расширенных версий структуры KSDATAFORMAT:

KSDATAFORMAT_WAVEFORMATEX

KSDATAFORMAT_DSOUND

Если минипорт-драйвер не предоставляет указатель группы служб (то есть, если NewStream вызов выходных данных NULL через указатель ServiceGroup), драйвер портов настраивает собственный периодический таймер вместо обработки событий потока и часов. Период для этого таймера в настоящее время составляет 20 миллисекунда, но период может измениться в будущих реализациях.

Параметры Stream Stream, OuterUnknown, PortStreamи ServiceGroup соответствуют соглашениям подсчета ссылок для объектов COM.

Обратите внимание, что NewStream не следует обычным соглашениям о подсчете ссылок в обработке указателя, который он выводит через параметр DmaChannel OUT. После завершения работы драйвера порта с помощью ссылок, получаемых с помощью других параметров out метода NewStream, Stream и ServiceGroup, он освобождает их, как ожидалось. В отличие от этого, драйвер портов никогда не использует указатель DmaChannel, который он получает от вызова NewStream, и он никогда не вызывает release на объекте DmaChannel.

Пример звукового драйвера ac97 в комплекте драйверов Microsoft Windows (WDK) отражает это поведение. Эта реализация метода IMiniportWavePci::NewStream вызывает AddRef на Stream и ServiceGroup ссылается на то, что он выводит, но не ссылку DmaChannel. Это поведение сохраняется ради обратной совместимости.

Обратите внимание, что методы NewStream для других типов портов (WaveCyclic, в частности) соответствуют обычным соглашениям о подсчете ссылок для всех параметров OUT.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка portcls.h (include Portcls.h)
IRQL PASSIVE_LEVEL

См. также

IDmaChannel

IMiniportWavePci

IMiniportWavePciStream

IPortWavePciStream

IServiceGroup

KSDATAFORMAT

KSDATAFORMAT_DSOUND

KSDATAFORMAT_WAVEFORMATEX

POOL_TYPE