Поделиться через


Обработка запуска PnP в драйвере класса хранилища

Драйвер класса хранения выполняет инициализацию для конкретного устройства, когда диспетчер PnP вызывает подпрограмму DispatchPnP драйвера класса с запросом на запуск (IRP_MJ_PNP с IRP_MN_START_DEVICE). Подпрограмма DispatchPnP драйвера класса хранения либо вызывает внутреннюю подпрограмму StartDevice , либо реализует те же встроенные функции. Так как запросы на запуск, отправляемые в FDO, должны обрабатываться сначала самым низким драйвером в стеке, подпрограмма DispatchPnP драйвера класса хранения пересылает запрос следующему драйверу с помощью IoCallDriver перед вызовом StartDevice. Если запрос был отправлен в PDO, драйверу не нужно пересылать запрос перед его обработкой.

Внутренняя подпрограмма StartDevice драйвера класса хранилища настраивает расширение устройства для своего FDO с данными, определяемыми драйвером, для управления запросами ввода-вывода для устройства. Дополнительные сведения см. в разделе Настройка расширения устройства класса хранилища.

Подпрограмма StartDevice должна включать любые интерфейсы устройств, зарегистрированные драйвером в своей процедуре AddDevice . (См . раздел Классы интерфейса устройства.) Он также может создать символьную ссылку для своего объекта устройства.

После завершения запуска нижнего устройства драйвер может предположить, что устройство находится в состоянии питания D0 (полностью включен и работает) для большинства целей. Если устройство не полностью выключено, драйвер порта будет помещать запросы в очередь до тех пор, пока устройство не будет готово. Тем не менее, если подпрограмме StartDevice драйвера необходимо выполнить какие-либо операции, для которых требуется текущий запуск, например для запуска диска, драйвер должен отправить D0 запрос на питание следующему ниже драйверу перед выполнением операции.

Драйвер устройства типа FILE_DEVICE_DISK или FILE_DEVICE_MASS_STORAGE может зарегистрироваться для обнаружения простоя и использовать стандартное время ожидания политики питания для класса устройства, указав значения времени ожидания сохранения и производительности -1 в вызове PoRegisterDeviceforIdleDetection .

Дополнительные сведения о подпрограмме DispatchPnP драйвера класса хранилища см. в разделе Обработка запросов PnP к периферийным устройствам хранилища. Дополнительные сведения об обработке запросов на запуск PnP см. в разделе Запуск устройства.