Обработка события GUID_TARGET_DEVICE_REMOVE_COMPLETE

Прежде чем диспетчер PnP отправляет IRP_MN_REMOVE_DEVICE IRP драйверам для устройства, диспетчер PnP вызывает все подпрограммы обратного вызова в режиме ядра, зарегистрированные для EventCategoryTargetDeviceChange на устройстве. Диспетчер PnP определяет структуру NotificationStructure и событие GUID_TARGET_DEVICE_REMOVE_COMPLETE.

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

  • Удалите регистрацию уведомлений на устройстве.

    Устройство было удалено, поэтому драйвер вызывает IoUnregisterPlugPlayNotification , чтобы удалить регистрацию уведомлений.

    Устройство по-прежнему может быть физически присутствует на компьютере, но все объекты устройства были удалены, и устройство недоступно для использования.

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

    Если устройство внезапно удалено, диспетчер PnP отправляет зарегистрированным драйверам уведомление об удалении без предварительного уведомления о запросе на удаление. В этом случае драйвер должен выполнить все необходимые действия по очистке, например закрыть все дескрипторы на устройстве и удалить все открытые ссылки на объект файла.