Compartilhar via


Modelo de programação DDI da UMDF

Aviso

O UMDF 2 é a versão mais recente do UMDF e substitui o UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum recurso novo está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Os drivers universais do Windows devem usar o UMDF 2.

Os exemplos de UMDF 1 arquivados podem ser encontrados no Windows 11, versão 22H2 – Atualização de exemplos de driver de maio de 2022.

Para obter mais informações, consulte Introdução aoUMDF.

A estrutura e o driver UMDF se comunicam por meio da DDI do UMDF. O DDI da UMDF é semelhante ao DDI KMDF, exceto que o DDI UMDF é baseado em COM. Portanto, os desenvolvedores de driver familiarizados com o KMDF entenderão o UMDF.

Para cada tipo de objeto de estrutura, o UMDF define uma interface por meio da qual manipular instâncias do objeto. Cada interface dá suporte a métodos e propriedades. Os métodos definem ações que podem ser tomadas em nome do objeto e das propriedades definidas e recuperam as características do objeto. Algumas interfaces são implementadas pela estrutura e outras são implementadas pelo driver. As interfaces expostas por um objeto de estrutura são da forma IWDF<objeto>, enquanto as interfaces de retorno de chamada de evento expostas por um driver são da forma I<objeto><ação>, onde <objeto> representa uma fila, uma solicitação, etc., e <ação> indica o que a interface faz. Os métodos das interfaces de retorno de chamada começam com "Ativado".

O driver UMDF se comunica com os objetos da estrutura por meio de seus métodos e propriedades. A estrutura se comunica com o driver por meio de notificações de evento, que são funções de retorno de chamada que a estrutura pode chamar para notificar o driver sobre eventos específicos. Para registrar funções de retorno de chamada, o driver pode chamar, por exemplo, os seguintes métodos de objeto da estrutura e pode passar um ponteiro para a interface IUnknown associada a todas as interfaces para as funções de retorno de chamada que o driver suporta.

Como exemplo de comunicação entre driver e framework, considere o objeto de fila padrão de E/S de um dispositivo. Um driver pode chamar métodos, como IWDFIoQueue::GetState, para recuperar informações de status sobre a fila de E/S ou IWDFIoQueue::RetrieveNextRequest para recuperar uma solicitação da fila de E/S. Um driver também pode solicitar notificações na fila de E/S chamando o método IWDFDevice::CreateIoQueue para registrar interfaces de retorno de chamada, como IQueueCallbackRead e IQueueCallbackWrite. Os métodos dessas interfaces são chamados posteriormente pela estrutura quando um aplicativo envia solicitações de leitura e gravação.

A estrutura oferece a sincronização necessária entre os métodos de retorno de chamada do driver. Por padrão, o framework sincroniza no nível do objeto do dispositivo; ou seja, o framework não chama os métodos de retorno de chamada de evento simultaneamente no nível do objeto do dispositivo ou abaixo dele. Um driver pode substituir esse padrão solicitando a desativação da sincronização. Para obter mais informações, consulte Especificando um modo de sincronização de retorno de chamada.