Compartir a través de


Aplicación de una lectura segura para una colección HID

En este artículo se describe cómo una aplicación en modo de usuario o un controlador en modo kernel puede aplicar una lectura segura para una colección HID de nivel superior.

Si una lectura segura está habilitada para una colección, solo los clientes "de confianza" (aquellos con privilegios SeTcbPrivilege) pueden obtener la entrada de un archivo abierto de una colección. Los controladores en modo kernel tienen privilegios SeTcbPrivilege de forma predeterminada, pero las aplicaciones en modo de usuario no. Para obtener información sobre cómo obtener privilegios del sistema en modo de usuario, consulte la información sobre la autorización en la documentación del SDK de Microsoft Windows.

Este mecanismo se proporciona principalmente para que los componentes del sistema en modo de usuario "de confianza" puedan impedir que las aplicaciones en modo de usuario sin privilegios SeTcbPrivilege obtengan la entrada de una colección durante las operaciones críticas del sistema. Por ejemplo, un componente del sistema en modo de usuario "de confianza" puede impedir que una aplicación en modo de usuario sin privilegios SeTcbPrivilege obtenga información confidencial que un usuario proporciona durante una operación de inicio de sesión.

Los clientes de "confianza" usan solicitudes de IOCTL_HID_ENABLE_SECURE_READ y IOCTL_HID_DISABLE_SECURE_READ para habilitar y deshabilitar una lectura segura para una colección. Si un cliente sin privilegios SeTcbPrivilege usa estas solicitudes, la solicitud no cambia el estado de lectura seguro de una colección y el controlador de clase HID devuelve un valor de estado de STATUS_PRIVILEGE_NOT_HELD.

La habilitación y deshabilitación de una lectura segura para una colección funciona de la siguiente manera:

  • El controlador de clase HID mantiene un recuento de lectura seguro específico del archivo para cada archivo abierto de una colección. El controlador de clase HID también mantiene un recuento de lectura seguro para la colección, que es la suma de los recuentos de lectura seguros específicos del archivo. El recuento de lectura seguro de la colección se inicializa en cero cuando se crea la colección y se inicializa un recuento de lectura seguro para un archivo en cero cuando se abre un archivo.

  • Cuando el controlador de clase HID recibe una solicitud de habilitación para un archivo, aumenta en 1 el recuento de lectura seguro para el archivo (e incrementa en 1 el recuento de lectura seguro para la colección).

  • Cuando el controlador de clase HID recibe una solicitud de deshabilitación para un archivo:

    • Si el recuento de lectura seguro para el archivo es mayor que cero, el controlador disminuye en 1 el recuento de lectura seguro para el archivo (y disminuye en 1 el recuento de lectura seguro de la colección).
    • Si el recuento de lectura seguro del archivo es igual a cero, el controlador no cambia los recuentos de lectura seguros.
  • Si el recuento de lectura seguro de una colección es mayor que cero, el controlador de clase HID exige una lectura segura para la colección. De lo contrario, el controlador no aplica una lectura segura para la colección.

  • Un cliente debe usar una solicitud de deshabilitación para cancelar una solicitud de habilitación correspondiente. Sin embargo, si el cliente no lo hace, el controlador de clase HID disminuye adecuadamente el recuento de lectura seguro de una colección cuando procesa una solicitud de IRP_MJ_CLOSE para un archivo. Cuando el controlador procesa la solicitud de cierre, disminuye el recuento de lectura seguro de la colección mediante el recuento de lectura seguro para el archivo que se está cerrando.