Функция RegisterDeviceNotificationW (winuser.h)

Регистрирует устройство или тип устройства, для которого окно будет получать уведомления.

Примечание

Вы можете использовать CM_Register_Notification вместо RegisterDeviceNotification, если ваш код предназначен для Windows 8 или более новых версий Windows. Преимущество CM_Register_Notification заключается в том, что для работы не требуется дескриптор окна.

Синтаксис

HDEVNOTIFY RegisterDeviceNotificationW(
  [in] HANDLE hRecipient,
  [in] LPVOID NotificationFilter,
  [in] DWORD  Flags
);

Параметры

[in] hRecipient

Дескриптор окна или службы, которые будут получать события устройства для устройств, указанных в параметре NotificationFilter . Один и тот же дескриптор окна можно использовать в нескольких вызовах RegisterDeviceNotification.

Службы могут указывать дескриптор окна или дескриптор состояния службы.

[in] NotificationFilter

Указатель на блок данных, указывающий тип устройства, для которого должны отправляться уведомления. Этот блок всегда начинается со структуры DEV_BROADCAST_HDR . Данные, следующие за этим заголовком, зависят от значения элемента dbch_devicetype , которое может быть DBT_DEVTYP_DEVICEINTERFACE или DBT_DEVTYP_HANDLE. Дополнительные сведения см. в подразделе "Примечания".

[in] Flags

Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
DEVICE_NOTIFY_WINDOW_HANDLE
0x00000000
Параметр hRecipient является дескриптором окна.
DEVICE_NOTIFY_SERVICE_HANDLE
0x00000001
Параметр hRecipient является дескриптором состояния службы.
 

Кроме того, можно указать следующее значение.

Значение Значение
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES
0x00000004
Уведомляет получателя о событиях интерфейса устройства для всех классов интерфейса устройства. (Элемент dbcc_classguid игнорируется.)

Это значение можно использовать, только если элемент dbch_devicetypeDBT_DEVTYP_DEVICEINTERFACE.

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

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

Если функция завершается сбоем, возвращается значение NULL. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Приложения отправляют уведомления о событиях с помощью функции BroadcastSystemMessage . Любое приложение с окном верхнего уровня может получать основные уведомления, обрабатывая WM_DEVICECHANGE сообщение. Приложения могут использовать функцию RegisterDeviceNotification для регистрации для получения уведомлений устройства.

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

Не забудьте как можно быстрее обрабатывать события Plug and Play устройства. В противном случае система может перестать отвечать на запросы. Если обработчик событий выполняет операцию, которая может блокировать выполнение (например, ввод-вывод), рекомендуется запустить другой поток для асинхронного выполнения операции.

Дескрипторы уведомлений устройства, возвращаемые registerDeviceNotification , должны быть закрыты путем вызова функции UnregisterDeviceNotification , если они больше не нужны.

События DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE автоматически передаются во все окна верхнего уровня для устройств порта. Поэтому нет необходимости вызывать RegisterDeviceNotification для портов, и функция завершается ошибкой, если элемент dbch_devicetypeDBT_DEVTYP_PORT. Уведомления о томах также передаются в окна верхнего уровня, поэтому функция завершается сбоем , если dbch_devicetype DBT_DEVTYP_VOLUME. Устройства, определяемые изготовителем оборудования, не используются системой напрямую, поэтому функция завершается сбоем , если dbch_devicetype DBT_DEVTYP_OEM.

Примеры

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

Примечание

Заголовок winuser.h определяет RegisterDeviceNotification в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

   
Минимальная версия клиента Windows XP
Минимальная версия сервера Windows Server 2003
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll
Набор API ext-ms-win-ntuser-misc-l1-1-0 (представлено в Windows 8)

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

BroadcastSystemMessage

DEV_BROADCAST_HDR

Функции Управление устройствами

Уведомления устройства

HandlerEx

RegisterDeviceNotification

UnregisterDeviceNotification

WM_DEVICECHANGE