Controlar el acceso a dispositivos (WDM)

El acceso a un dispositivo se controla mediante un descriptor de seguridad (y la ACL que contiene). Se puede especificar un descriptor de seguridad para un objeto de dispositivo cuando se crea el objeto de dispositivo o se establece en el Registro.

Controlar el acceso a dispositivos para controladores WDM

Cuando un controlador WDM (distinto de determinados controladores de bus) crea un objeto de dispositivo, el administrador de Plug and Play determina un descriptor de seguridad para el dispositivo. El orden de las operaciones es el siguiente.

  1. El administrador de PnP llama a la rutina AddDevice del controlador.

  2. La rutina AddDevice del controlador llama a IoCreateDevice para crear el objeto de dispositivo y adjuntarlo a la pila de objetos del dispositivo.

  3. El administrador de PnP actualiza el descriptor de seguridad para el objeto de dispositivo recién creado.

Para un controlador WDM, el administrador de PnP determina el descriptor de seguridad para el objeto de dispositivo de la siguiente manera.

  1. Si el dispositivo tiene una configuración de descriptor de seguridad en el Registro, se aplica a todos los objetos de la pila de dispositivos.

  2. De lo contrario, si la clase de instalación del dispositivo tiene una configuración de descriptor de seguridad en el Registro, se aplica a todos los objetos de la pila de dispositivos.

  3. De lo contrario, el administrador de PnP deja el descriptor de seguridad predeterminado para cada objeto sin cambios. En este caso, el descriptor de seguridad predeterminado para la pila viene determinado por el tipo de dispositivo y las características del dispositivo del PDO.

Para la mayoría de los tipos y características de dispositivo, el descriptor de seguridad predeterminado proporciona acceso completo (GENERIC_ALL) a los administradores y acceso de lectura, escritura y ejecución (GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE) acceso a todos los demás.

Para obtener más información sobre cómo establecer un descriptor de seguridad para una clase de configuración de dispositivo o dispositivo en el Registro, vea Establecer propiedades de objeto de dispositivo en el Registro.

Si un dispositivo funciona en modo sin procesar, el administrador de PnP no puede determinar un descriptor de seguridad para el objeto de dispositivo. En ese caso, el controlador de autobús debe proporcionar un descriptor de seguridad; consulte a continuación.

Controlar el acceso a dispositivos para controladores de bus WDM

Un controlador de bus WDM debe proporcionar un descriptor de seguridad para el PDO de todos los dispositivos que se pueden operar en modo sin procesar. Use IoCreateDeviceSecure para crear el objeto de dispositivo con un descriptor de seguridad.

Si el controlador de bus no opera un dispositivo en modo sin procesar, no es necesario proporcionar un descriptor de seguridad. El administrador de PnP determina el descriptor de seguridad, como se ha descrito anteriormente. El controlador de bus puede proporcionar un descriptor de seguridad si debe asegurarse de que sus DPO tienen una configuración de seguridad más estricta que el descriptor predeterminado. Cualquier descriptor especificado por el controlador de bus se invalida mediante la configuración del Registro.

Para obtener más información sobre cómo crear objetos de dispositivo, vea Creating a Device Object.

Controlar el acceso a dispositivos para controladores que no son WDM

Los controladores que no son WDM deben especificar un descriptor de seguridad predeterminado y un GUID de clase para los objetos de dispositivo con nombre que creen.

Use la rutina IoCreateDeviceSecure para crear el objeto de dispositivo con nombre y especificar el descriptor de seguridad predeterminado y el GUID de clase para ese dispositivo. El descriptor de seguridad se especifica en un subconjunto de SDDL. Para obtener más información, consulte SDDL para objetos de dispositivo.

El sistema invalida el descriptor de seguridad predeterminado con cualquier configuración de seguridad del Registro para el GUID de clase especificado. El controlador debe especificar su propio GUID único para el dispositivo. Use la herramienta GuidGen para generar un GUID único. (GuidGen se incluye en el Microsoft Windows SDK).