Método IMiniportWavePci::NewStream (portcls.h)
O método NewStream
cria uma nova instância de um fluxo lógico associado a um canal físico especificado.
Sintaxe
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
);
Parâmetros
[out] Stream
Ponteiro de saída para o novo fluxo. Esse parâmetro aponta para uma variável de ponteiro alocada por chamador na qual o método grava um ponteiro na interface IMiniportWavePciStream do objeto de fluxo. O chamador especifica um ponteiro nulonulo válido e não para esse parâmetro.
[in, optional] OuterUnknown
Ponteiro para a interface IUnknown de um objeto que precisa agregar o objeto de fluxo. Esse parâmetro é opcional. Se a agregação não for necessária, o chamador especifica esse parâmetro como NULL.
[in] PoolType
Especifica o tipo de pool de memória do qual o armazenamento do objeto de canal DMA deve ser alocado. Esse parâmetro será um dos tipos de pool nãopagados definidos na enumeração POOL_TYPE.
[in] PortStream
Ponteiro para a interface IPortWavePciStream do objeto de fluxo do driver de porta.
[in] Pin
Especifica uma ID de pino que identifica o pino que deve ser aberto. Se o descritor de filtro do driver de miniporto WavePci especificar um total de n fixar fábricas no filtro, os valores válidos para o parâmetro Pin estarão no intervalo de 0 a n-1.
[in] Capture
Especifica se um fluxo de captura ou um fluxo de renderização deve ser criado. Esse parâmetro é TRUE para um canal de captura (entrada) e FALSE para um canal de reprodução (saída).
[in] DataFormat
Ponteiro para uma estrutura KSDATAFORMAT que especifica o formato de dados do fluxo.
[out] DmaChannel
Ponteiro de saída para o canal DMA. Esse parâmetro aponta para uma variável de ponteiro alocada por chamador na qual o método grava um ponteiro no objeto IDmaChannel do fluxo. O chamador especifica um ponteiro nulonulo válido e não para esse parâmetro.
[out] ServiceGroup
Ponteiro de saída para o grupo de serviços. Esse parâmetro aponta para uma variável de ponteiro alocada por chamador na qual o método grava um ponteiro na interface IServiceGroup do objeto do grupo de serviços do fluxo. Esse é o grupo de serviços que está sendo registrado para notificação de interrupção. O chamador especifica um ponteiro nulonulo válido e não para esse parâmetro.
Valor de retorno
NewStream
retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Caso contrário, o método retornará um código de erro apropriado.
Observações
O método NewStream
define o estado inicial do fluxo como KSSTATE_STOP e sua posição inicial como zero. (Consulte IMiniportWavePciStream::SetState e IMiniportWavePciStream::GetPosition.)
O parâmetro DataFormat, que especifica o formato de dados do fluxo, aponta para uma das seguintes versões estendidas específicas de áudio da estrutura de KSDATAFORMAT:
Se o driver de miniporto não fornecer um ponteiro do grupo de serviços (ou seja, se a chamada NewStream
gerar saídas NULL por meio do ponteiro servicegroup de), o driver de porta configurará seu próprio temporizador periódico em vez de processar eventos de ponto de fluxo e relógio. O período para esse temporizador atualmente é de 20 milissegundos, mas o período pode mudar em implementações futuras.
Os parâmetros Stream, OuterUnknown, PortStreame ServiceGroup seguem as convenções de contagem de referência para objetos COM.
Observe que NewStream
não segue as convenções usuais de contagem de referência na manipulação do ponteiro que ele gera por meio do parâmetro DmaChannel OUT. Quando o driver de porta terminar de usar as referências que recebe por meio dos outros parâmetros OUT do método NewStream
, Stream e serviceGroup, ele os libera, conforme o esperado. Por outro lado, o driver de porta nunca usa o ponteiro de DmaChannel que recebe da chamada NewStream
e nunca chama de Versão no objeto DmaChannel.
O driver de áudio de exemplo ac97 no Microsoft Windows Driver Kit (WDK) reflete esse comportamento. A implementação desse exemplo do método IMiniportWavePci::NewStream
chama AddRef no de Fluxo e referências de do ServiceGroup que ele gera, mas não a referência de DmaChannel. Esse comportamento é preservado para fins de compatibilidade com versões anteriores.
Observe que os métodos NewStream
para os outros tipos de porta (WaveCyclic, em particular) seguem as convenções habituais de contagem de referência para todos os seus parâmetros OUT.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
cabeçalho | portcls.h (inclua Portcls.h) |
IRQL | PASSIVE_LEVEL |