Функция IoUnregisterPlugPlayNotificationEx (wdm.h)

Процедура IoUnregisterPlugPlayNotificationEx отменяет регистрацию процедуры обратного вызова драйвера для уведомлений о событиях Plug and Play (PnP).

Синтаксис

NTSTATUS IoUnregisterPlugPlayNotificationEx(
  [in] PVOID NotificationEntry
);

Параметры

[in] NotificationEntry

Указатель на непрозрачное значение, представляющее отменяемую регистрацию. Вызывающий объект ранее получил это значение, вызвав подпрограмму IoRegisterPlugPlayNotification .

Возвращаемое значение

IoUnregisterPlugPlayNotificationEx возвращает STATUS_SUCCESS, если параметр NotificationEntry является допустимым.

Комментарии

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

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

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

Часто драйвер вызывает IoUnregisterPlugPlayNotificationEx из подпрограммы обратного вызова уведомлений. В большинстве случаев драйвер может безопасно удалить регистрацию процедуры обратного вызова уведомлений таким образом. Однако для процедуры обратного вызова уведомлений небезопасно вызывать IoUnregisterPlugPlayNotificationEx , чтобы отменить регистрацию, если выполняются следующие условия:

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

  • Вызов IoRegisterPlugPlayNotification , который регистрирует подпрограмму обратного вызова уведомлений, еще не вернулся.

Подпрограмма обратного вызова не должна вызывать какие-либо подпрограммы, которые могут блокировать выполнение потока, в котором выполняется подпрограмма обратного вызова. Например, если плохо разработанная процедура обратного вызова помещает рабочий элемент, вызывающий IoUnregisterPlugPlayNotificationEx , в очередь рабочих элементов, а затем ожидает завершения рабочего потока рабочего элемента, это приведет к взаимоблокировке операционной системы.

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

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

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

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 7.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

См. также раздел

IoRegisterPlugPlayNotification

IoUnregisterPlugPlayNotification