Регистрация для уведомления об изменении интерфейса устройства
Драйвер регистрируется для уведомления о событиях поступления и удаления интерфейса устройства, вызывая IoRegisterPlugPlayNotification.
Следующие сведения относятся к вызову этой процедуры для уведомления об изменении интерфейса устройства:
Укажите eventCategoryeventCategoryDeviceInterfaceChange.
EventCategoryData должен указывать на GUID для класса интерфейса устройства.
Guid для класса интерфейса обычно определяется в файле заголовка со структурами, константами и т. д. для интерфейса.
Укажите eventCategoryFlags PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES.
Этот флаг указывает диспетчеру PnP регистрировать CallbackRoutine для будущих поступлений и вылетов интерфейса устройства указанного класса, а также немедленно вызывать CallbackRoutine для всех соответствующих интерфейсов устройств, которые уже активны.
Драйвер может вызвать IoGetDeviceInterfaces , чтобы получить список существующих интерфейсов определенного класса, а затем зарегистрировать свою подпрограмму обратного вызова без этого флага, но использовать флаг проще и избежать потенциальных проблем со временем.
При необходимости укажите определенный драйвером контекст, который диспетчер PnP будет передавать в подпрограмму обратного вызова.
Драйвер, открывающий дескриптор устройства в ответ на уведомление о поступлении интерфейса устройства, должен зарегистрироваться для событий EventCategoryTargetDeviceChange на устройстве. (См . раздел Использование уведомления об изменении целевого устройства PnP.)
Драйвер отменяет регистрацию уведомления, вызывая IoUnregisterPlugPlayNotification с notificationEntry , возвращенным IoRegisterPlugPlayNotification.