Partilhar via


objetos de arquivo Driver-Created versus Application-Created

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 novo recurso 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 com UMDF.

Quando um aplicativo abre um identificador para um dispositivo, a estrutura chama o método IQueueCallbackCreate::OnCreateFile do driver e fornece um ponteiro para a interface IWDFFile do objeto de arquivo associado ao dispositivo. Todas as solicitações de E/S que o aplicativo envia para o identificador aberto são associadas ao objeto de arquivo criado. Quando essas solicitações chegam, a estrutura chama o método apropriado de uma das Interfaces de Objeto de Fila UMDF fornecidas pelo driver. Em seguida, o driver pode chamar IWDFIoRequest::GetFileObject para determinar o objeto de arquivo associado à solicitação. O driver pode chamar AssignContext no objeto de arquivo para associar o contexto específico à sessão de E/S.

A tabela a seguir mostra as chamadas feitas pelo aplicativo e as notificações resultantes que o driver recebe.

O aplicativo é iniciado O driver recebe

Uma chamada para a função CreateFile do Microsoft Win32.

Uma chamada para o método IQueueCallbackCreate::OnCreateFile .

Uma chamada para a função Win32 ReadFileEx, WriteFileEx ou DeviceIoControl .

Uma chamada para o método IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite ou IQueueCallbackDeviceIoControl::OnDeviceIoControl .

Uma chamada para a função CloseHandle do Win32 para o último identificador aberto para o objeto de arquivo.

Uma chamada para o método IFileCallbackCleanup::OnCleanupFile .

O driver cancela ou conclui todas as solicitações de E/S associadas ao objeto de arquivo.

Depois que o driver retorna da notificação de limpeza, o UMDF cancela todas as solicitações de E/S pendentes.

Após a conclusão da limpeza e o UMDF cancela as solicitações de E/S pendentes, o driver recebe uma chamada para o método IFileCallbackClose::OnCloseFile .

Um componente do sistema pode emitir uma solicitação de criação em nome de um aplicativo Universal do Windows. Se o driver precisar determinar a ID do processo do aplicativo que emitiu a solicitação de criação, ele poderá chamar o método IWDFFile3::GetInitiatorProcessId .

Objetos de arquivo criados pelo driver

Se o driver precisar criar e enviar uma solicitação de E/S independente do aplicativo para o próximo driver na pilha (o destino de E/S padrão), o driver deverá chamar IWDFDevice::CreateWdfFile para recuperar um ponteiro para uma interface IWDFDriverCreatedFile . Nesse caso, o próximo driver recebe as mesmas notificações que o driver recebe quando o aplicativo gera a solicitação.

A tabela a seguir mostra as chamadas feitas pelo driver e as notificações resultantes para o próximo driver na pilha.

Inicia o driver O próximo driver na pilha recebe

Uma chamada para o método IWDFDevice::CreateWdfFile .

O objeto de arquivo que o UMDF cria representa uma sessão de E/S entre o dispositivo e o próximo dispositivo na pilha.

Uma chamada para o método IQueueCallbackCreate::OnCreateFile .

Uma chamada para o método IWDFDevice::CreateRequest .

Uma chamada para formatar a solicitação (por exemplo, uma chamada para o método IWDFIoTarget::FormatRequestForIoctl ).

Uma chamada para o método IWDFIoRequest::Send .

Uma chamada para o método IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite ou IQueueCallbackDeviceIoControl::OnDeviceIoControl .

Uma chamada para o método IWDFDriverCreatedFile::Close .

Uma chamada para o método IFileCallbackCleanup::OnCleanupFile .

O driver cancela ou conclui todas as solicitações de E/S associadas ao objeto de arquivo.

Depois que o driver retorna da notificação de limpeza, o UMDF cancela todas as solicitações de E/S pendentes.

Após a conclusão da limpeza e o UMDF cancela as solicitações de E/S pendentes, o driver recebe uma chamada para o método IFileCallbackClose::OnCloseFile .

Para o próximo dispositivo na pilha, não há diferença entre o objeto de arquivo criado por um aplicativo e o objeto de arquivo criado por um dispositivo de camada superior.