IRP_MN_START_DEVICE
Todos los controladores PnP deben controlar este IRP.
Value
0x00
Código principal
Cuándo se envió
El administrador de PnP envía este IRP después de haber asignado recursos de hardware, si los hay, al dispositivo. Es posible que el dispositivo se haya enumerado recientemente y se esté iniciando por primera vez o que el dispositivo se reinicie después de que se detenga para el reequilibrio de recursos.
A veces, el administrador de PnP envía un IRP_MN_START_DEVICE a un dispositivo que ya se ha iniciado, proporcionando un conjunto diferente de recursos que el dispositivo está usando actualmente. Un controlador inicia esta acción llamando a IoInvalidateDeviceState y respondiendo a la solicitud de IRP_MN_QUERY_PNP_DEVICE_STATE posterior con la marca PNP_RESOURCE_REQUIREMENTS_CHANGED establecida. Un conductor de autobús podría usar este mecanismo, por ejemplo, para abrir una nueva apertura en un puente PCI a PCI.
El administrador de PnP envía este IRP en IRQL PASSIVE_LEVEL en el contexto de un subproceso del sistema.
Parámetros de entrada
El miembro Parameters.StartDevice.AssignResources de la estructura IO_STACK_LOCATION apunta a un CM_RESOURCE_LIST que describe los recursos de hardware que el administrador de PnP asignó al dispositivo. Esta lista contiene los recursos en formato sin formato. Use los recursos sin procesar para programar el dispositivo.
Parameters.StartDevice.AssignResourcesTranslated apunta a un CM_RESOURCE_LIST que describe los recursos de hardware que el administrador de PnP asignó al dispositivo. Esta lista contiene los recursos en formato traducido. Use los recursos traducidos para conectar el vector de interrupción, el espacio de E/S de mapa y la memoria de mapa.
Parámetros de salida
Ninguno
Bloque de estado de entrada/salida
Un controlador establece Irp-IoStatus.Status> en STATUS_SUCCESS o en un estado de error adecuado, como STATUS_UNSUCCESSFUL o STATUS_INSUFFICIENT_RESOURCES.
Si un controlador requiere tiempo para ejecutar sus operaciones de inicio para un dispositivo, puede marcar el IRP pendiente y devolver STATUS_PENDING.
Operación
Este IRP debe ser controlado primero por el controlador de bus primario para un dispositivo y, a continuación, por cada controlador superior de la pila de dispositivos.
En respuesta a este IRP, los controladores inician un dispositivo por primera vez o reinician un dispositivo detenido. Las operaciones exactas necesarias para iniciar un dispositivo varían de dispositivo a dispositivo, pero pueden incluir encendido en el dispositivo, realizar inicialización específica del dispositivo y conectar la interrupción.
Normalmente, un controlador puede controlar este IRP de la misma manera si inicia un dispositivo por primera vez o reinicia un dispositivo después de un IRP_MN_STOP_DEVICE, excepto si un controlador necesita restaurar el estado del dispositivo en un reinicio después de una detención.
En Windows Vista y los sistemas operativos posteriores, se recomienda que los controladores siempre penden la IRP_MN_START_DEVICE IRP y completen su procesamiento más adelante. Este orden permite al sistema procesar los reinicios asincrónicos del dispositivo. (En los sistemas operativos antes de Windows Vista, los controladores pueden devolver STATUS_PENDING desde sus rutinas de envío, pero el administrador de PnP no se superpone al reinicio del dispositivo con cualquier otra operación).
Para obtener más información sobre cómo controlar un IRP de inicio, consulte Inicio de un dispositivo.
Envío de este IRP
Reservado para uso del sistema. Los controladores no deben enviar este IRP.
Requisitos
Encabezado |
Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h) |