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


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

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

Заметка

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

Синтаксис

HDEVNOTIFY RegisterDeviceNotificationA(
  [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_devicetypeDBT_DEVTYP_VOLUME. Определяемые изготовителем устройства не используются непосредственно системой, поэтому функция завершается ошибкой, если dbch_devicetypeDBT_DEVTYP_OEM.

Примеры

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

Заметка

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP
минимальный поддерживаемый сервер Windows Server 2003
целевая платформа Виндоус
заголовка 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

Отмена регистрации

WM_DEVICECHANGE