Compartilhar via


Diretrizes de sessão zero para drivers UMDF

A partir do Windows Vista, o sistema operacional isola os serviços e os processos do sistema na Sessão 0, enquanto os aplicativos são executados em sessões numeradas posteriores e mais altas. Como o processo de host umDF (WUDFHost.exe) é um dos processos do sistema executados na sessão 0, os drivers UMDF são isolados de aplicativos. Como resultado, você deve usar as seguintes diretrizes ao desenvolver seu driver:

  • Não crie um elemento de interface do usuário, como uma caixa de diálogo, ou dependa da entrada do usuário. Como o usuário não está operando na Sessão 0, ele nunca vê a interface do usuário e não pode responder a ela.

    Da mesma forma, não manipule nenhum elemento de interface do usuário. Por exemplo, um driver UMDF não pode enumerar janelas na sessão do usuário.

  • Se o driver precisar se comunicar com um serviço, use um mecanismo cliente/servidor, como RPC (chamada de procedimento remoto) ou pipes nomeados.

  • Tenha cuidado ao chamar funções na API do Windows. Algumas funções podem manipular elementos da interface do usuário ou tentar acessar objetos nomeados na sessão de um usuário. Não chame funções do Windows às quais você não recorreria de um serviço em modo usuário. Como regra geral, um driver UMDF pode chamar com segurança funções que são exportadas em kernel32.dll, mas não funções exportadas em user32.dll.

    Um driver UMDF pode chamar funções do Windows para executar as seguintes tarefas:

    • Um driver pode chamar as funções SetupDiXxx para recuperar uma propriedade do dispositivo Plug and Play. Por exemplo, o Driver de Exemplo UMDF para o Kit de Aprendizagem USB Fx2 do OSR chama SetupDiGetDeviceRegistryProperty para recuperar o GUID para o tipo de barramento do dispositivo. Nota Um driver UMDF não pode chamar muitas das funções SetupDiXxx com segurança, mas é seguro chamar funções que recuperam as propriedades do nó do dispositivo.

    • Um driver que recupera solicitações de E/S de uma fila manual pode criar um temporizador periódico para sondar a fila. Por exemplo, o exemplo wudfVhidmini registra uma rotina de retorno de chamada de temporizador chamando CreateThreadpoolTimer e define um temporizador periódico chamando SetThreadpoolTimer. Nota A partir da versão 1.11, o UMDF oferece suporte para itens de trabalho. Para obter mais informações, consulte Usando itens de trabalho.

Para obter informações adicionais sobre como usar serviços do sistema fora das estruturas, consulte o Capítulo 14 ("Além das Estruturas") de Orwick, Penny e Guy Smith. Desenvolvendo drivers com o Windows Driver Foundation. Redmond, WA: Microsoft Press, 2007.

Para obter informações adicionais sobre o isolamento da sessão zero, consulte Impacto do isolamento da sessão 0 em serviços e drivers no Windows.