Использование настраиваемого уведомления PnP
Драйвер может использовать механизм уведомления об изменении целевого устройства, чтобы получать уведомления о пользовательских событиях на устройстве.
Программист, определяющий пользовательское событие, должен выполнить следующие действия:
Определите новый GUID для настраиваемого события.
Создайте GUID с помощью Uuidgen или Guidgen (которые включены в Microsoft Windows SDK). Опубликуйте GUID в соответствующем файле заголовка и документации.
Напишите код для активации пользовательского события.
В режиме ядра драйвер вызывает IoReportTargetDeviceChange с пользовательским GUID и указателем на PDO для устройства. Пользовательские события можно активировать только в режиме ядра.
Модуль записи драйверов использует настраиваемое уведомление с помощью следующей процедуры:
Драйвер (или приложение) регистрируется для уведомления о пользовательском событии.
В режиме ядра драйвер вызывает IoRegisterPlugPlayNotification и регистрирует eventCategoryTargetDeviceChange на устройстве.
В пользовательском режиме приложение регистрируется с помощью RegisterDeviceNotification. Дополнительные сведения см. в разделе Windows SDK.
Компонент режима ядра активирует пользовательское событие.
Диспетчер PnP вызывает подпрограммы уведомлений, зарегистрированные на устройстве.
Диспетчер PnP вызывает зарегистрированные процедуры обратного вызова в пользовательском режиме, а затем вызывает подпрограммы обратного вызова в режиме ядра.
После завершения уведомления в пользовательском режиме подпрограммы обратного вызова уведомления драйвера в режиме ядра реагируют на пользовательское событие.
Общие рекомендации для процедур обратного вызова уведомлений см. в статье Рекомендации по написанию процедур обратного вызова уведомлений PnP . Помимо этих рекомендаций, настраиваемая процедура обратного вызова уведомлений не должна открывать дескриптор для устройства из потока подпрограммы обратного вызова.