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


Регистрация для уведомления об изменении интерфейса устройства

Драйвер регистрируется для уведомления о событиях поступления и удаления интерфейса устройства, вызывая IoRegisterPlugPlayNotification.

Следующие сведения относятся к вызову этой процедуры для уведомления об изменении интерфейса устройства:

  • Укажите eventCategoryeventCategoryDeviceInterfaceChange.

  • EventCategoryData должен указывать на GUID для класса интерфейса устройства.

    Guid для класса интерфейса обычно определяется в файле заголовка со структурами, константами и т. д. для интерфейса.

  • Укажите eventCategoryFlags PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES.

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

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

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

Драйвер, открывающий дескриптор устройства в ответ на уведомление о поступлении интерфейса устройства, должен зарегистрироваться для событий EventCategoryTargetDeviceChange на устройстве. (См . раздел Использование уведомления об изменении целевого устройства PnP.)

Драйвер отменяет регистрацию уведомления, вызывая IoUnregisterPlugPlayNotification с notificationEntry , возвращенным IoRegisterPlugPlayNotification.