Compartir vía


Controlar el acceso al espacio de nombres del dispositivo

En windows Driver Model (WDM), todos los objetos de dispositivo tienen un espacio de nombres asociado. Los nombres del espacio de nombres del dispositivo son rutas de acceso que comienzan por el nombre del dispositivo. Para un dispositivo denominado "\Device\DeviceName", su espacio de nombres consta de cualquier nombre del formato "\DeviceName\\FileName". (Para un sistema de archivos, FileName es un nombre real de un archivo en el sistema de archivos).

Un controlador WDM recibe solicitudes abiertas para todos los nombres del espacio de nombres del dispositivo. El controlador trata una solicitud abierta para "\Device\DeviceName" como una apertura del propio objeto de dispositivo. Si el controlador implementa compatibilidad con las solicitudes abiertas en el espacio de nombres del dispositivo, trata una solicitud abierta para "\DeviceName\\FileName" como una apertura de un "archivo" dentro del espacio de nombres del objeto de dispositivo (donde la noción de "archivo" para el dispositivo está determinada por el controlador).

La mayoría de los controladores no implementan compatibilidad con operaciones abiertas en el espacio de nombres del dispositivo, pero todos los controladores deben proporcionar comprobaciones de seguridad para evitar el acceso no autorizado al espacio de nombres del dispositivo. De forma predeterminada, las comprobaciones de seguridad de las solicitudes de apertura de archivos dentro del espacio de nombres del dispositivo (por ejemplo, "\DeviceName\\FileName") se dejan completamente al controlador; el sistema operativo no comprueba la ACL del objeto de dispositivo.

Si se establece la característica FILE_DEVICE_SECURE_OPEN de un objeto de dispositivo, el sistema aplica el descriptor de seguridad del objeto de dispositivo a todas las solicitudes abiertas de archivos en el espacio de nombres del dispositivo. Los controladores pueden establecer FILE_DEVICE_SECURE_OPEN cuando crean el objeto de dispositivo con IoCreateDevice o IoCreateDeviceSecure. En el caso de los controladores WDM, también se puede establecer FILE_DEVICE_SECURE_OPEN en el Registro. También se puede establecer en el Registro para objetos de dispositivo de controladores que no son WDM creados por IoCreateDeviceSecure. Para obtener más información sobre cómo establecer propiedades de objeto de dispositivo, como las características del dispositivo, en el Registro, vea Establecer propiedades de objeto de dispositivo en el Registro. Para obtener más información sobre las características del dispositivo, consulte Especificar características del dispositivo.

Los controladores de los dispositivos que no admiten espacios de nombres deben usar uno de los dos métodos para asegurarse de que las solicitudes de apertura de archivos dentro del espacio de nombres del dispositivo se controlan correctamente:

  • Los objetos de dispositivo del controlador tienen el conjunto de características del dispositivo FILE_DEVICE_SECURE_OPEN. Después, el controlador puede tratar cualquier solicitud abierta en el espacio de nombres del dispositivo como una solicitud abierta para el objeto de dispositivo.

  • El controlador puede producir un error en las solicitudes de IRP_MJ_CREATE que especifican un parámetro IrpSp-FileObject-FileName>> cuya longitud es distinta de cero. En este caso, las solicitudes abiertas del dispositivo están sujetas a la comprobación de ACL del sistema, mientras que el controlador no puede realizar todas las solicitudes abiertas de archivos dentro del espacio de nombres del dispositivo. (Los controladores que admiten aperturas exclusivas deben usar esta opción).

Los controladores para dispositivos que admiten espacios de nombres también pueden usar dos métodos para proteger las solicitudes de apertura de archivos en el espacio de nombres del dispositivo:

  • Los objetos de dispositivo del controlador tienen el conjunto de características del dispositivo FILE_DEVICE_SECURE_OPEN. Esto garantiza que la configuración de seguridad del dispositivo se aplique uniformemente al espacio de nombres del dispositivo. (El controlador es responsable de implementar la compatibilidad con el espacio de nombres en su función de devolución de llamada DRIVER_DISPATCH ).

  • El controlador comprueba las ACL para el nombre de archivo en su rutina DispatchCreate . (Incluso en este caso, el controlador debe establecer la característica FILE_DEVICE_SECURE_OPEN a menos que se abra en el espacio de nombres del dispositivo puede tener una configuración de seguridad más débil que el objeto de dispositivo).

La característica FILE_DEVICE_SECURE_OPEN se comprueba en la parte superior de la pila, por lo que los objetos de dispositivo de filtro deben copiar el miembro Características del objeto de dispositivo siguiente inferior después de adjuntarse.