다음을 통해 공유


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

추가 정보

CM_NOTIFY_ACTION

CM_NOTIFY_FILTER

CM_Unregister_Notification

RegisterDeviceNotification

디바이스 인터페이스 도착 및 디바이스 제거 알림 등록

디바이스 인터페이스 사용