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.