RegisterDeviceNotificationA 함수(winuser.h)

창에서 알림을 받을 디바이스 또는 디바이스 유형을 등록합니다.

참고

코드가 Windows 8 이상 버전의 Windows를 대상으로 하는 경우 RegisterDeviceNotification 대신 CM_Register_Notification 사용할 수 있습니다. CM_Register_Notification 장점은 창 핸들이 작동하지 않는다는 것입니다.

구문

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

매개 변수

[in] hRecipient

NotificationFilter 매개 변수에 지정된 디바이스에 대한 디바이스 이벤트를 수신할 창 또는 서비스에 대한 핸들입니다. RegisterDeviceNotification에 대한 여러 호출에서 동일한 창 핸들을 사용할 수 있습니다.

서비스는 창 핸들 또는 서비스 상태 핸들을 지정할 수 있습니다.

[in] NotificationFilter

알림을 보내야 하는 디바이스 유형을 지정하는 데이터 블록에 대한 포인터입니다. 이 블록은 항상 DEV_BROADCAST_HDR 구조체로 시작합니다. 이 헤더 다음에 오는 데이터는 DBT_DEVTYP_DEVICEINTERFACE 또는DBT_DEVTYP_HANDLE 수 있는 dbch_devicetype 멤버의 값에 따라 달라집니다. 자세한 내용은 설명 부분을 참조하세요.

[in] Flags

이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
DEVICE_NOTIFY_WINDOW_HANDLE
0x00000000
hRecipient 매개 변수는 창 핸들입니다.
DEVICE_NOTIFY_SERVICE_HANDLE
0x00000001
hRecipient 매개 변수는 서비스 상태 핸들입니다.
 

또한 다음 값을 지정할 수 있습니다.

의미
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES
0x00000004
받는 사람에게 모든 디바이스 인터페이스 클래스에 대한 디바이스 인터페이스 이벤트를 알 수 있습니다. (dbcc_classguid 멤버는 무시됩니다.)

이 값은 dbch_devicetype 멤버가 DBT_DEVTYP_DEVICEINTERFACE 경우에만 사용할 수 있습니다.

반환 값

함수가 성공하면 반환 값은 디바이스 알림 핸들입니다.

함수가 실패하면 반환 값은 NULL입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

애플리케이션은 BroadcastSystemMessage 함수를 사용하여 이벤트 알림을 보냅니다. 최상위 창이 있는 모든 애플리케이션은 WM_DEVICECHANGE 메시지를 처리하여 기본 알림을 받을 수 있습니다. 애플리케이션은 RegisterDeviceNotification 함수를 사용하여 등록하여 디바이스 알림을 받을 수 있습니다.

서비스는 RegisterDeviceNotification 함수를 사용하여 디바이스 알림을 수신하도록 등록할 수 있습니다. 서비스가 hRecipient 매개 변수의 창 핸들을 지정하면 알림이 창 프로시저로 전송됩니다. hRecipient가 서비스 상태 핸들인 경우 SERVICE_CONTROL_DEVICEEVENT 알림이 서비스 제어 처리기로 전송됩니다. 서비스 제어 처리기에 대한 자세한 내용은 HandlerEx를 참조하세요.

플러그 앤 플레이 디바이스 이벤트를 최대한 빨리 처리해야 합니다. 그렇지 않으면 시스템이 응답하지 않을 수 있습니다. 이벤트 처리기가 실행을 차단할 수 있는 작업(예: I/O)을 수행하는 경우 다른 스레드를 시작하여 작업을 비동기적으로 수행하는 것이 가장 좋습니다.

RegisterDeviceNotification에서 반환된 디바이스 알림 핸들은 더 이상 필요하지 않은 경우 UnregisterDeviceNotification 함수를 호출하여 닫아야 합니다.

DBT_DEVICEARRIVALDBT_DEVICEREMOVECOMPLETE 이벤트는 포트 디바이스의 모든 최상위 창에 자동으로 브로드캐스트됩니다. 따라서 포트에 대해 RegisterDeviceNotification 을 호출할 필요가 없으며 dbch_devicetype 멤버가 DBT_DEVTYP_PORT 경우 함수가 실패합니다. 볼륨 알림도 최상위 창으로 브로드캐스트되므로 dbch_devicetype DBT_DEVTYP_VOLUME 경우 함수가 실패합니다. OEM 정의 디바이스는 시스템에서 직접 사용되지 않으므로 dbch_devicetype DBT_DEVTYP_OEM 경우 함수가 실패합니다.

예제

예를 들어 디바이스 알림 등록을 참조하세요.

참고

winuser.h 헤더는 REGISTERDeviceNotification을 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP
지원되는 최소 서버 Windows Server 2003
대상 플랫폼 Windows
헤더 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