Compartilhar via


Impondo uma leitura segura para uma coleção HID

Este artigo descreve como um aplicativo de modo de usuário ou driver de modo kernel pode impor uma leitura segura para uma coleção HID de nível superior.

Se uma leitura segura estiver habilitada para uma coleção, somente clientes "confiáveis" (aqueles com privilégios SeTcbPrivilege) poderão obter entrada de um arquivo aberto de uma coleção. Os drivers do modo kernel têm privilégios SeTcbPrivilege por padrão, mas os aplicativos do modo de usuário não. Para obter informações sobre como obter privilégios do sistema no modo de usuário, consulte as informações sobre autorização na documentação do SDK do Microsoft Windows.

Esse mecanismo é fornecido principalmente para que os componentes do sistema de modo de usuário "confiáveis" possam impedir que aplicativos de modo de usuário sem privilégios SeTcbPrivilege obtenham entrada de uma coleção durante operações críticas do sistema. Por exemplo, um componente do sistema de modo de usuário "confiável" pode impedir que um aplicativo de modo de usuário sem privilégios SeTcbPrivilege obtenha informações confidenciais que um usuário fornece durante uma operação de logon.

Os clientes "confiáveis" usam solicitações IOCTL_HID_ENABLE_SECURE_READ e IOCTL_HID_DISABLE_SECURE_READ para habilitar e desabilitar uma leitura segura para uma coleção. Se um cliente sem privilégios SeTcbPrivilege usar essas solicitações, a solicitação não alterará o estado de leitura segura de uma coleção e o driver de classe HID retornará um valor de status de STATUS_PRIVILEGE_NOT_HELD.

Habilitar e desabilitar uma leitura segura para uma coleção funciona da seguinte maneira:

  • O driver de classe HID mantém uma contagem de leitura segura específica do arquivo para cada arquivo aberto de uma coleção. O driver de classe HID também mantém uma contagem de leitura segura para a coleção, que é a soma das contagens de leitura segura específicas do arquivo. A contagem de leitura segura da coleção é inicializada como zero quando a coleção é criada e uma contagem de leitura segura para um arquivo é inicializada como zero quando um arquivo é aberto.

  • Quando o driver de classe HID recebe uma solicitação de habilitação para um arquivo, ele incrementa em 1 a contagem de leitura segura para o arquivo (e incrementa em 1 a contagem de leitura segura para a coleção).

  • Quando o driver de classe HID recebe uma solicitação de desabilitação para um arquivo:

    • Se a contagem de leitura segura do arquivo for maior que zero, o driver diminuirá em 1 a contagem de leitura segura do arquivo (e diminuirá em 1 a contagem de leitura segura da coleção).
    • Se a contagem de leitura segura do arquivo for igual a zero, o driver não alterará as contagens de leitura segura.
  • Se a contagem de leitura segura de uma coleção for maior que zero, o driver de classe HID imporá uma leitura segura para a coleção. Caso contrário, o driver não imporá uma leitura segura para a coleção.

  • Um cliente deve usar uma solicitação de desabilitação para cancelar uma solicitação de habilitação correspondente. No entanto, se o cliente não fizer isso, o driver de classe HID diminuirá adequadamente a contagem de leitura segura de uma coleção quando processar uma solicitação IRP_MJ_CLOSE de um arquivo. Quando o driver processa a solicitação de fechamento, ele diminui a contagem de leitura segura para a coleção pela contagem de leitura segura para o arquivo que está sendo fechado.