Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
No modo de usuário, os objetos COM são criados usando uma função como CoCreateInstance (descrita na documentação do SDK do Microsoft Windows), onde o cliente não está ciente de como a memória necessária para o objeto é alocada. No modo kernel, no entanto, onde a alocação de memória tende a ser rigidamente controlada, um método diferente de criação de objetos é necessário.
O modelo de driver de áudio usa o conceito da interface COM, conforme definido pela interface IUnknown . Controladores de áudio, no entanto, não são necessários para aceder ao registo ou para usar mecanismos como servidores em processo. Os drivers de miniporta não são necessários para suportar a agregação.
Por convenção, a função usada para criar uma classe específica de objetos sempre assume a mesma forma:
NTSTATUS CreateMyObject(
OUT PUNKNOWN *Unknown,
IN REFGUID ClassId,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType
);
Parâmetros
Desconhecido
Ponteiro para um ponteiro para uma interface IUnknown . A função gera uma referência ao objeto recém-criado por meio de Unknown.
ClassId
Especifica o GUID da classe, que é passado por referência. Este parâmetro é usado somente se a função cria objetos de várias classes. Caso contrário, ele será definido como NULL.
OuterUnknown
Especifica a interface IUnknown para agregar o novo objeto. Este parâmetro pode ser definido como NULL para indicar que nenhuma agregação é necessária.
Tipo de Piscina
Especifica o tipo de pool de memória do qual o objeto deve ser alocado (consulte POOL_TYPE).
Os três primeiros parâmetros são idênticos aos parâmetros da função COM CoCreateInstance . Para obter um exemplo de uma função de criação desse tipo, consulte a função CreateMiniportMidiFM no driver de áudio de exemplo Fmsynth no Microsoft Windows Driver Kit (WDK).
Outra convenção é fornecer uma função NewXxx para uma classe. Essas funções fornecem uma maneira fácil de instanciar (criar e inicializar) um objeto, como mostrado no exemplo a seguir:
NTSTATUS NewMyObject(
OUT PMYINTERFACE *InterfacePointer,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType,
// ...more parameters
);
A função NewMyObject cria e inicializa um objeto e, em seguida, passa um ponteiro de volta para a interface. Como os parâmetros de inicialização são específicos da classe, o protótipo de uma nova funçãoXxx também é. A função NewXxx fornece fácil acesso ao construtor do objeto.
Para obter um exemplo de uma nova funçãoXxx desse tipo, consulte PcNewDmaChannel.