Recursos de hardware

Los recursos de hardware son las rutas de acceso de bus asignables y direccionables que permiten que los dispositivos periféricos y los procesadores del sistema se comuniquen entre sí. Los recursos de hardware suelen incluir direcciones de puerto de E/S, vectores de interrupción y bloques de direcciones de memoria relativas al bus.

Para que el sistema pueda comunicarse con una instancia de dispositivo, el administrador de PnP debe asignar recursos de hardware a la instancia del dispositivo en función del conocimiento de qué recursos están disponibles y cuáles son capaces de usar la instancia del dispositivo. Los recursos se asignan a cada nodo de dispositivo del árbol de dispositivos (suponiendo que el dispositivo representado necesita recursos y esos recursos están disponibles). El administrador de PnP realiza un seguimiento de los recursos de hardware mediante listas, que asocia a los nodos de dispositivo. Usa dos tipos de listas:

Lista de requisitos de recursos
Normalmente, los dispositivos están diseñados para funcionar dentro de intervalos de asignaciones de recursos. Por ejemplo, un dispositivo puede requerir solo un vector de interrupción, pero podría usar cualquiera de un rango de vectores. Para cada instancia de dispositivo, el administrador de PnP mantiene una lista de requisitos de recursos que especifica todos los intervalos de recursos de hardware en los que el dispositivo puede funcionar. El nombre de la lista se deriva del hecho de que se requiere el administrador de PnP para elegir recursos de esta lista al asignarlos al dispositivo.

El código en modo kernel especifica las listas de requisitos de recursos mediante estructuras de IO_RESOURCE_REQUIREMENTS_LIST (ya sea como entrada para rutinas del sistema o en respuesta a los IRP). El código en modo de usuario especifica las listas de requisitos de recursos que usan estructuras del administrador de configuración de PnP como entrada para las funciones del administrador de configuración de PnP.

Lista de recursos
Cuando el administrador de PnP asigna recursos a un dispositivo, realiza un seguimiento de estas asignaciones mediante la creación de una lista de recursos asignados para cada instancia de dispositivo. Estas listas se podrían denominar listas de asignación de recursos, pero ese nombre normalmente se abre en las listas de recursos. El administrador de PnP puede cambiar el contenido de la lista de recursos a medida que los dispositivos se agregan o quitan de un sistema y los recursos se reasignan posteriormente. (Un BIOS de PnP también puede asignar recursos. Además, el software de instalación, mediante archivos INF o entrada de usuario, puede forzar al administrador de PnP a asignar recursos específicos a un dispositivo).

El código en modo kernel especifica listas de recursos mediante estructuras de CM_RESOURCE_LIST (ya sea como entrada para rutinas del sistema o en respuesta a los IRP). El código en modo de usuario especifica listas de recursos mediante estructuras del administrador de configuración de PnP como entrada para las funciones del administrador de configuración de PnP.

El administrador de PnP almacena listas de requisitos de recursos y listas de recursos en el registro, donde se pueden ver mediante Regedit.exe. Los controladores pueden acceder a estas listas indirectamente a través de rutinas de Plug and Play y Plug and Play IRP menores. Las aplicaciones en modo de usuario pueden usar funciones del administrador de configuración de PnP. (Los controladores y las aplicaciones no deben acceder directamente a estas listas mediante funciones del Registro porque el formato de almacenamiento está sujeto a cambios en una versión futura).

Configuraciones lógicas

Las listas de requisitos de recursos y las listas de recursos contienen una o varias configuraciones lógicas. Cada configuración lógica identifica un intervalo de recursos aceptables o un conjunto de recursos específicos para una instancia de dispositivo específica. Además, cada configuración lógica de una instancia de dispositivo pertenece a uno de los tipos de configuración lógicos. Los tipos de configuración se enumeran a continuación. Se pueden asignar varias configuraciones lógicas, de los mismos tipos o diferentes, a cada instancia de dispositivo.

Tipos de configuración lógica para listas de requisitos de recursos

Configuración básica
Lista de requisitos de recursos que identifica los intervalos de recursos proporcionados por un dispositivo Plug and Play. Un controlador debe devolver esta lista cuando recibe la IRP_MN_QUERY_RESOURCE_REQUIREMENTS IRP. (La configuración básica de un dispositivo que no es PnP se puede describir en un archivo INF. En este caso, el software de instalación de dispositivos lee el archivo INF y llama a las funciones del administrador de configuración de PnP para crear una lista de requisitos).

Configuración filtrada
Una lista de requisitos de recursos que se ha proporcionado a una pila de controladores, posiblemente modificada y que devuelve la pila de controladores, en respuesta a la IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP. El administrador de PnP usa la configuración filtrada resultante como base para asignar recursos.

Invalidación de la configuración
Lista de requisitos de recursos que invalida las configuraciones básicas. Normalmente, un instalador de dispositivo crea una configuración de invalidación si el archivo INF del dispositivo incluye una sección INF DDInstall.LogConfigOverride. No se quita una configuración de invalidación si su dispositivo se quita físicamente del sistema.

Tipos de configuración lógica para listas de recursos

Configuración de arranque
Lista de recursos que identifica los recursos asignados a una instancia de dispositivo cuando se arranca el sistema. (En el caso de los dispositivos PnP, esta es la configuración proporcionada por el BIOS; para dispositivos que no son PnP, estos recursos pueden seleccionarse mediante jumpers en la tarjeta). Un controlador debe devolver esta lista de recursos cuando recibe el irP de IRP_MN_QUERY_RESOURCES . (Una configuración de arranque puede estar parcialmente vacía si el BIOS no puede determinar todos los recursos usados por un dispositivo). El administrador de PnP puede modificar esta lista si se quita o reinicia un dispositivo. En el caso de los dispositivos que no son PnP, este tipo de configuración se puede usar en lugar de una configuración forzada, en cuyo caso tiene una prioridad de configuración inferior a una configuración forzada equivalente. Solo puede existir una configuración de arranque para cada instancia de dispositivo.

Configuración forzada
Una lista de recursos que identifica los recursos que debe usar una instancia de dispositivo. Una configuración forzada impide que el administrador de PnP asigne otros recursos a la instancia del dispositivo. Un instalador de dispositivo puede crear una configuración forzada basada en la información contenida en un INF o recibida de un usuario. No se quita una configuración forzada si su dispositivo se quita físicamente del sistema. Solo puede existir una configuración forzada para cada instancia de dispositivo.

Configuración asignada
Una lista de recursos que identifica los recursos actualmente en uso por una instancia de dispositivo. Solo puede existir una configuración asignada para cada instancia de dispositivo.

Los controladores de dispositivo son responsables de determinar la configuración básica de un dispositivo compatible con PnP, la configuración filtrada y la configuración de arranque, y para devolver esa información en respuesta a los IRP enviados por el administrador de PnP. (Para obtener más información, vea Agregar un dispositivo PnP a un sistema en ejecución). El software de instalación de controladores puede crear configuraciones de invalidación, configuraciones forzadas y, para dispositivos que no son PnP, configuraciones de arranque. El administrador de PnP mantiene la configuración asignada de cada instancia de dispositivo.

Cuando se crea, se asigna una prioridad a cada configuración. Si el administrador de PnP encuentra que a una instancia de dispositivo se le han asignado varias configuraciones lógicas del mismo tipo, intenta usar la que tiene la prioridad más alta en primer lugar. Si esa configuración da lugar a conflictos de recursos, intenta la configuración con la siguiente prioridad más baja. (Para obtener una lista de prioridades de configuración, consulte CM_Add_Empty_Log_Conf).