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


Использование пользовательского уведомления PnP

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

Программист, определяющий настраиваемое событие, должен выполнить следующее:

  1. Определите новый GUID для настраиваемого события.

    Создайте GUID с помощью Uuidgen или Guidgen (которые включены в пакет SDK для Microsoft Windows). Опубликуйте GUID в соответствующем файле заголовка и документации.

  2. Напишите код для активации настраиваемого события.

    В режиме ядра драйвер вызывает IoReportTargetDeviceChange с пользовательским ИДЕНТИФИКАТОРом GUID и указателем на PDO для устройства. Пользовательские события можно активировать только в режиме ядра.

Автор драйверов использует пользовательское уведомление с такой процедурой:

  1. Драйвер (или приложение) регистрируется для получения уведомлений о пользовательском событии.

    В режиме ядра драйвер вызывает IoRegisterPlugPlayNotification и регистрирует событие EventCategoryTargetDeviceChange на устройстве.

    В пользовательском режиме приложение регистрируется с помощью RegisterDeviceNotification. Дополнительные сведения см. в пакете SDK для Windows.

  2. Компонент режима ядра активирует настраиваемое событие.

  3. Диспетчер PnP вызывает подпрограммы уведомлений, зарегистрированные на устройстве.

    Диспетчер PnP вызывает зарегистрированные подпрограммы обратного вызова в режиме пользователя, а затем вызывает подпрограммы обратного вызова в режиме ядра.

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

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