Solicitações de item de propriedade do driver de miniport
Esta seção é uma breve introdução às solicitações de item de propriedade DirectMusic. Uma visão geral completa desse e de outros conceitos de streaming de kernel pode ser encontrada no Kernel Streaming.
Os drivers de miniporto DirectMusic devem lidar com conjuntos de propriedades de drivers de áudio. Uma solicitação de propriedade vem em duas partes. A primeira parte é o conjunto de propriedades definido pela estrutura KSPROPERTY . O segundo é um buffer de dados que contém dados de instância específicos do item de propriedade.
A estrutura KSPROPERTY contém o seguinte:
Um GUID predefinido que especifica o conjunto (como KSPROPSETID_Synth_Dls).
Uma ID de item que especifica o item de propriedade dentro do conjunto (como KSPROPERTY_SYNTH_DLS_DOWNLOAD).
Sinalizadores que especificam a operação solicitada.
O membro Flags do KSPROPERTY pode conter exatamente um dos seguintes sinalizadores para especificar a operação solicitada do driver de miniporte:
KSPROPERTY_TYPE_GET
Para recuperar o valor do item de propriedade fornecido.
KSPROPERTY_TYPE_SET
Para definir o valor do item de propriedade fornecido.
KSPROPERTY_TYPE_BASICSUPPORT
Para determinar o tipo de suporte disponível para o conjunto de propriedades. Os dados retornados em *pvPropertyData são um DWORD que contém um ou ambos os KSPROPERTY_TYPE_GET e KSPROPERTY_TYPE_SET, indicando quais operações são possíveis.
A segunda parte da solicitação de item de propriedade são os dados da instância, que é um buffer que pode ser usado para passar dados de ou para o driver de miniporte. A forma como esse buffer é usado depende se a solicitação é um SET ou GET:
Se a solicitação for uma KSPROPERTY_TYPE_SET, os dados da instância serão enviados para o driver de miniporto, mas não serão retornados ao solicitante.
Se a solicitação for uma KSPROPERTY_TYPE_GET, os dados da instância serão preenchidos no driver de miniporto e retornados ao solicitante.
Uma solicitação de item de propriedade pode ser direcionada para um nó específico na topologia do driver de miniport. A topologia do driver de miniporto descreve o layout do driver e o hardware subjacente. Dentro da topologia podem ser nós em que os itens de propriedade podem ser enviados, independentemente de haver instâncias de pino disponíveis no momento da solicitação.
Uma instância de pin deve ser criada para a reprodução DirectMusic. Os dados directMusic são enviados para o nó do tipo KSNODETYPE_DMSYNTH. Veja a seguir um exemplo de uma conexão de driver de miniport:
Conecte o fluxo ao synth:
PCFILTER_NODE Fixar 0 (fora) –> Nó 0 Pino 1 (in)
Conecte o synth ao áudio:
Nó 0 Fixar 0 (fora) –> PCFILTER_NODE Fixar 1 (in)
Os formatos de dados com suporte são um intervalo de dados que especifica em qual formato um pino pode receber dados.
O formato DirectMusic (STATIC_KSDATAFORMAT_SUBTYPE_DIRECTMUSIC) deve ser definido na topologia do driver de miniporto para que o DirectMusic possa enviar seus dados para o driver de miniport. Esse formato é definido pela estrutura DMUS_EVENTHEADER (consulte a documentação SDK do Microsoft Windows) em dmusbuff.h. Quando o driver de miniporto especifica que ele dá suporte a esse intervalo de dados específico, o DirectMusic pode expor esse intervalo de dados ao usuário (por meio de um pino na própria porta).