Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Любой драйвер, который должен инициализировать себя на этапах, может содержать подпрограмму повторной инициализации . Подпрограмма повторной инициализации вызывается после того, как подпрограмма DriverEntry вернула контроль и другие драйверы инициализировали себя. Обычно подпрограмма повторной инициализации выполняет задачи, которые необходимо выполнить после того, как стартовал другой драйвер.
Например, драйвер класса клавиатуры системы kbdclass поддерживает как порты PnP, так и устаревшие порты клавиатуры. Если система включает один или несколько устаревших портов, которые диспетчер PnP не может обнаружить, драйвер класса клавиатуры должен, тем не менее, создать объект устройства для каждого порта и располагаться над нижележащими драйверами для порта. Следовательно, драйвер класса имеет подпрограмму повторной инициализации для вызова после вызова подпрограмм DriverEntry и AddDevice , а другие драйверы загружены. Подпрограмма Reinitialize обнаруживает порт, создает объект устройства для него и накладывает драйвер на другие драйверы нижнего уровня для устройства.
Подпрограмма DriverEntry драйвера вызывает IoRegisterDriverReinitialization для постановки в очередь подпрограммы Повторной инициализации для выполнения. Подпрограмма повторной инициализации также может вызывать IoRegisterDriverReinitialization, что приводит к повторному запросу подпрограммы. Один из параметров для повторной инициализации указывает количество вызовов.
Вызов IoRegisterDriverReinitialization может включать указатель на определяемые драйвером данные контекста, которые система предоставляет в качестве входных данных для повторной инициализации. Если подпрограмма повторно инициализации использует реестр, данные контекста должны включать указатель RegistryPath , переданный в подпрограмму DriverEntry , так как этот указатель не является входным параметром для подпрограммы повторной инициализации .
Подпрограмма повторной инициализации не вызывается, если DriverEntry не возвращает STATUS_SUCCESS.
Как правило, драйвер с подпрограммой повторной инициализации является драйвером более высокого уровня, который управляет как PnP, так и устаревшими устройствами. Помимо создания объектов устройств, обнаруженных диспетчером PnP (и для которых диспетчер PnP вызывает подпрограмму AddDevice драйвера), драйвер также должен создавать объекты устройств для устаревших устройств, которые диспетчер PnP не перечисляет. Подпрограмма Повторной инициализации создает эти объекты устройств и располагает драйвер поверх следующего нижнего драйвера для основного устройства.
Если драйвер имеет подпрограмму повторной инициализации , он инициализируется в том же базовом шаге, который описан в статье "Написание подпрограммы DriverEntry", а также имеет те же основные требования, что и его подпрограмма DriverEntry .