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

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

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

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

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

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

    В режиме ядра драйвер вызывает IoReportTargetDeviceChange с пользовательским GUID и указателем на PDO для устройства. Пользовательские события можно активировать только в режиме ядра.

Модуль записи драйверов использует настраиваемое уведомление с помощью следующей процедуры:

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

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

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

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

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

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

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

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