Controlar el inicio de PnP en un controlador de clase de almacenamiento
Un controlador de clase de almacenamiento realiza la inicialización específica del dispositivo cuando el administrador de PnP llama a la rutina DispatchPnP del controlador de clase con una solicitud de inicio (IRP_MJ_PNP con IRP_MN_START_DEVICE). La rutina DispatchPnP del controlador de clase de almacenamiento llama a una rutina StartDevice interna o implementa la misma funcionalidad insertada. Dado que las solicitudes de inicio enviadas a un FDO deben controlarse primero por el controlador más bajo de la pila, la rutina DispatchPnP del controlador de clase de almacenamiento reenvía la solicitud al controlador siguiente inferior con IoCallDriver antes de llamar a StartDevice. Si la solicitud se envió a un PDO, el controlador no necesita reenviar la solicitud antes de controlarla.
Una rutina startDevice interna del controlador de clase de almacenamiento configura la extensión del dispositivo de su FDO con datos determinados por el controlador para administrar las solicitudes de E/S del dispositivo. Para obtener más información, consulte Configuración de una extensión de dispositivo del controlador de clase de almacenamiento.
Una rutina StartDevice debe habilitar las interfaces de dispositivo que el controlador registró en su rutina AddDevice . (Consulte Clases de interfaz de dispositivo). También puede crear un vínculo simbólico para su objeto de dispositivo.
Una vez completado el inicio del dispositivo inferior, el controlador puede suponer que el dispositivo está en estado de alimentación D0 (totalmente activado y operativo) para la mayoría de los propósitos. Si el dispositivo no está completamente encendido, el controlador de puerto pondrá en cola las solicitudes hasta que el dispositivo esté listo. Sin embargo, si la rutina StartDevice del controlador necesita realizar las operaciones que requieran la corriente de inrush (por ejemplo, para poner en marcha una unidad de disco), el controlador debe enviar una solicitud de alimentación D0 al controlador inferior siguiente antes de realizar la operación.
Un controlador de un dispositivo de tipo FILE_DEVICE_DISK o FILE_DEVICE_MASS_STORAGE puede registrarse para la detección de inactividad y usar el tiempo de espera de la directiva de alimentación estándar para la clase de dispositivo especificando valores de tiempo de espera de conservación y rendimiento de -1 en su llamada PoRegisterDeviceforIdleDetection .
Para obtener más información sobre la rutina DispatchPnP de un controlador de clase de almacenamiento, consulte Control de solicitudes PnP a periféricos de almacenamiento. Para obtener más información sobre cómo controlar las solicitudes de inicio de PnP, consulte Inicio de un dispositivo.