CM_Register_Notification 함수(cfgmgr32.h)
CM_Register_Notification 함수는 지정된 형식의 PnP 이벤트가 발생할 때 호출할 애플리케이션 콜백 루틴을 등록합니다.
코드가 Windows 7 또는 이전 버전의 Windows를 대상으로 하는 경우 CM_Register_Notification 대신 RegisterDeviceNotification을 사용합니다. 커널 모드 호출자는 대신 IoRegisterPlugPlayNotification 을 사용해야 합니다.
구문
CMAPI CONFIGRET CM_Register_Notification(
[in] PCM_NOTIFY_FILTER pFilter,
[in, optional] PVOID pContext,
[in] PCM_NOTIFY_CALLBACK pCallback,
[out] PHCMNOTIFICATION pNotifyContext
);
매개 변수
[in] pFilter
CM_NOTIFY_FILTER 구조체에 대한 포인터입니다.
[in, optional] pContext
pCallback의 콜백 루틴에 전달할 컨텍스트를 포함하는 호출자 할당 버퍼에 대한 포인터입니다.
[in] pCallback
지정된 PnP 이벤트가 발생할 때 호출할 루틴에 대한 포인터입니다. 콜백 함수의 프로토타입은 설명 섹션을 참조하세요.
콜백 루틴의 Action 매개 변수는 CM_NOTIFY_ACTION 열거형의 값입니다.
알림을 받으면 콜백이 알림을 검사하는 방법은 콜백 루틴의 EventData 매개 변수의 FilterType 멤버에 따라 달라집니다.
CM_NOTIFY_FILTER_TYPE_DEVICEINTERFACE
콜백은 EventData-u.DeviceInterface>를 검사해야 합니다.
CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE
콜백은 EventData-u.DeviceHandle>을 검사해야 합니다.
CM_NOTIFY_FILTER_TYPE_DEVICEINSTANCE
콜백은 EventData-u.DeviceInstance>를 검사해야 합니다.
[out] pNotifyContext
등록 호출에 해당하는 HCMNOTIFICATION 핸들을 수신하는 포인터입니다.
반환 값
작업이 성공하면 함수는 CR_SUCCESS 반환합니다. 그렇지 않으면 Cfgmgr32.h에 정의된 CR_ 접두사 오류 코드 중 하나를 반환합니다.
설명
플러그 앤 플레이 디바이스 이벤트를 최대한 빨리 처리해야 합니다. 이벤트 처리기가 실행을 차단할 수 있는 작업(예: I/O)을 수행하는 경우 다른 스레드를 시작하여 작업을 비동기적으로 수행하는 것이 가장 좋습니다.
CM_Register_Notification 함수는 기존 디바이스 인터페이스에 대한 알림을 제공하지 않습니다. 기존 인터페이스를 검색하려면 먼저 CM_Register_Notification 호출한 다음 , CM_Get_Device_Interface_List 호출합니다. 드라이버가 CM_Register_Notification 호출한 후 인터페이스를 사용하도록 설정했지만 드라이버가 CM_Get_Device_Interface_List 호출하기 전에 드라이버가 인터페이스 도착에 대한 알림을 수신하고 인터페이스도 CM_Get_Device_Interface_List 반환된 디바이스 인터페이스 인스턴스 목록에 표시됩니다.
CM_Register_Notification 반환된 HCMNOTIFICATION 핸들은 더 이상 필요하지 않은 경우 CM_Unregister_Notification 함수를 호출하여 닫아야 합니다.
콜백 루틴은 다음 함수 프로토타입을 사용합니다.
typedef __callback DWORD (CALLBACK *PCM_NOTIFY_CALLBACK)(
_In_ HCMNOTIFICATION hNotify,
_In_opt_ PVOID Context,
_In_ CM_NOTIFY_ACTION Action,
_In_reads_bytes_(EventDataSize) PCM_NOTIFY_EVENT_DATA EventData,
_In_ DWORD EventDataSize
);
CM_NOTIFY_ACTION_DEVICEQUERYREMOVE 알림에 응답하는 경우 PCM_NOTIFY_CALLBACK 콜백은 ERROR_SUCCESS 또는 ERROR_CANCELLED 적절하게 반환해야 합니다. 그렇지 않으면 콜백이 ERROR_SUCCESS 반환해야 합니다. 콜백은 다른 값을 반환해서는 안 됩니다. 다른 작업에 대한 설명은 CM_NOTIFY_ACTION 설명서를 참조하세요. 또한 EventData 매개 변수에서 이 콜백이 수신하는 구조체에 대한 자세한 내용은 CM_NOTIFY_EVENT_DATA 참조하세요.
예제
예를 들어 디바이스 인터페이스 도착 및 디바이스 제거 알림 등록을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Microsoft Windows 8 이상 버전의 Windows에서 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | cfgmgr32.h(Cfgmgr32.h 포함) |
라이브러리 | Cfgmgr32.lib; Windows 10 OneCoreUAP.lib |
DLL | CfgMgr32.dll |