¿Cuándo se crean los objetos de dispositivo WDM?
En esta sección se describe cada tipo de objeto de dispositivo y se menciona cuándo se crea cada uno.
En la ilustración siguiente se muestran los posibles tipos de objetos de dispositivo que se pueden conectar en una pila de dispositivos, que representan los controladores que controlan las solicitudes de E/S de un dispositivo.
A partir de la parte inferior de esta figura:
Un controlador de bus crea un PDO para cada dispositivo que enumera en su bus.
Un controlador de bus crea un PDO para un dispositivo secundario cuando enumera el dispositivo. Un controlador de bus enumera un dispositivo en respuesta a una solicitud de IRP_MN_QUERY_DEVICE_RELATIONS para BusRelations del administrador de PnP. El controlador de bus crea un PDO para un dispositivo secundario si el dispositivo se ha agregado al bus desde la última vez que el controlador de autobús respondió a una solicitud de relaciones de consulta para BusRelations (o si se trata de la primera solicitud de relaciones de consulta desde que se ha arrancado la máquina).
Un PDO representa el dispositivo al controlador de bus, así como a otros componentes del sistema en modo kernel, como el administrador de energía, el administrador de PnP y el administrador de E/S.
Otros controladores para un dispositivo conectan objetos de dispositivo sobre el PDO, pero el PDO siempre está en la parte inferior de la pila del dispositivo.
Los controladores de filtro de bus opcionales crean DO de filtro para cada dispositivo que filtran.
Cuando el administrador de PnP detecta un nuevo dispositivo en una lista BusRelations , determina si hay controladores de filtro de bus para el dispositivo. Si es así, para cada controlador de este tipo, el administrador de PnP garantiza que se cargue (llama a DriverEntry si es necesario) y llama a la rutina AddDevice del controlador. Si el controlador de filtro de bus filtra las operaciones de este dispositivo, el controlador de filtro crea un objeto de dispositivo y lo adjunta a la pila de dispositivos en su rutina AddDevice . Si existe más de un controlador de filtro de bus y es relevante para este dispositivo, cada uno de estos controladores de filtro crea y adjunta su propio objeto de dispositivo.
Los controladores de filtro de nivel inferior opcionales crean DO de filtro para cada dispositivo que filtran.
Si existe un controlador de filtro de nivel inferior opcional para este dispositivo, el administrador de PnP garantiza que dicho controlador se cargue después del controlador de autobús y de cualquier controlador de filtro de autobús. El administrador de PnP llama a la rutina AddDevice del controlador de filtro. En su rutina AddDevice , el controlador de filtro de nivel inferior crea un DO de filtro para el dispositivo y lo asocia a la pila de dispositivos. Si existe más de un controlador de filtro de nivel inferior, cada uno de estos controladores crearía y adjuntaría su propio filtro DO.
El controlador de función crea un FDO para el dispositivo.
El administrador de PnP garantiza que el controlador de función del dispositivo se cargue y llame a la rutina AddDevice del controlador de función. El controlador de función crea un FDO y lo asocia a la pila del dispositivo.
Opcional, los controladores de filtro de nivel superior crean un do de filtro para cada dispositivo que filtran.
Si existen controladores de filtro de nivel superior opcionales para el dispositivo, el administrador de PnP garantiza que se cargan después del controlador de función y llama a sus rutinas AddDevice . Cada uno de estos controladores de filtro conecta su objeto de dispositivo a la pila de dispositivos.
En resumen, la pila de dispositivos contiene un objeto de dispositivo para cada controlador implicado en el control de E/S en un dispositivo determinado. El controlador de bus primario tiene un PDO, el controlador de función tiene un FDO y cada controlador de filtro opcional tiene un do de filtro.
Tenga en cuenta que todos los dispositivos, los dispositivos adaptador/controlador de bus y los dispositivos que no son de bus, tienen un PDO y un FDO en su pila de dispositivos. El controlador de autobús crea el PDO para un adaptador o controlador de bus para el bus primario. Por ejemplo, si un adaptador SCSI se conecta a un bus PCI, el controlador de bus PCI crea un PDO para el adaptador SCSI.
Si se usa un dispositivo en modo sin procesar, no hay controladores de filtro ni función (ningún DO de FDO o filtro). Solo hay un PDO para el controlador de autobús primario y cero o más DO de filtro de bus.
Consulte Creación de un objeto device para obtener información sobre qué rutinas de controlador son responsables de crear y adjuntar objetos de dispositivo.
La pila de dispositivos más información adicional constituye el devnode para un dispositivo. El administrador de PnP mantiene información en el nodo de desarrollo de un dispositivo, como si el dispositivo se ha iniciado y qué controladores, si los hay, se han registrado para notificar los cambios en el dispositivo. El comando del depurador de kernel !devnode muestra información sobre un devnode.