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


Рекомендации по написанию функций обратного вызова уведомлений PnP

Диспетчер PnP вызывает подпрограммы обратного вызова уведомлений на уровне IRQL = PASSIVE_LEVEL.

Чтобы обеспечить плавную работу подсистемы PnP, подпрограмма обратного вызова уведомлений PnP должна соответствовать следующим рекомендациям:

  1. Функция обратного вызова уведомлений не должна блокировать.

  2. Подпрограмма обратного вызова уведомлений не должна вызывать или инициировать вызов синхронных процедур, которые генерируют события PnP, или любых процедур, блокирующих процесс ожидания установки или удаления устройства.

    Вызов таких подпрограмм во время уведомительного обратного вызова может привести к взаимоблокировке системы.

    Например, драйвер не должен вызывать IoReportTargetDeviceChange в подпрограмме обратного вызова уведомлений. Вместо этого вызовите IoReportTargetDeviceChangeAsynchronous .

  3. Подпрограмма обратного вызова уведомлений должна возвращать успех для любых событий, которые не завершаются явным образом сбоем.

    Когда драйвер регистрируется для получения уведомлений о категории событий, диспетчер PnP уведомляет драйвер как о текущих, так и о будущих событиях в этой категории. Если драйвер возвращает состояние ошибки для событий, которые он не обрабатывает, драйвер рискует сбоем нового события запроса по ошибке.

    Драйвер корректно возвращает код ошибки, когда, например, не удается выполнить запрос уведомления о наложении вето на предлагаемое событие.

  4. Подпрограмма обратного вызова уведомлений должна быть показано на странице кода.