디바이스 이벤트 유형
WM_DEVICECHANGE 메시지를 처리할 때 디바이스 이벤트 유형을 확인하려면 wParam 매개 변수를 검사합니다. wParam 값은 lParam 매개 변수에서 이벤트별 데이터의 의미를 결정합니다. 일반적으로 이벤트별 데이터는 디바이스를 식별하고 이벤트에 대한 추가 세부 정보를 제공합니다. 이 데이터의 형식은 디바이스 유형에 따라 달라지지만 처음 몇 바이트는 항상 DEV_BROADCAST_HDR 구조체와 동일한 형식을 갖습니다. 데이터 형식을 확인하려면 dbch_devicetype 멤버를 확인합니다.
시스템은 디바이스가 삽입되어 사용할 수 있을 때마다 형식 DBT_DEVICEARRIVAL(즉, wParam DBT_DEVICEARRIVAL 설정된 WM_DEVICECHANGE 메시지)의 디바이스 이벤트를 브로드캐스트합니다. 애플리케이션은 일반적으로 디바이스 유형을 확인하고 적절한 경우 즉시 디바이스 사용을 시작합니다.
시스템은 DBT_DEVICEQUERYREMOVE 디바이스 이벤트를 브로드캐스트하여 디바이스 제거 권한을 요청합니다. 디바이스가 필요한지 여부를 확인하기 위해 애플리케이션에서 사용자에게 지침을 묻는 대화 상자를 표시할 수 있습니다. 애플리케이션에서 디바이스가 필요하다고 판단되면 이 요청을 거부하고 BROADCAST_QUERY_DENY 반환하여 제거를 취소할 수 있습니다. 애플리케이션에 디바이스가 필요하지 않은 경우 TRUE반환해야 합니다. 애플리케이션 또는 드라이버가 디바이스를 제거하라는 이전 요청을 취소한 경우 시스템은 즉시 DBT_DEVICEQUERYREMOVEFAILED 메시지를 보냅니다.
시스템은 디바이스를 제거하기 전에 DBT_DEVICEREMOVEPENDING 디바이스 이벤트를 마지막 경고로 브로드캐스트합니다. 이 시점에서 애플리케이션은 제거를 취소할 수 없으므로 디바이스를 사용하는 경우 데이터 손실을 방지하기 위해 제거를 준비해야 합니다. 이는 네트워크 연결이 제거될 때 특히 중요합니다. 애플리케이션은 열려 있는 파일 또는 파이프가 해당 연결에 있는지 여부를 결정해야 합니다. 메시지의 이벤트별 데이터에서 네트워크 리소스 식별자를 파일 및 파이프에 대해 이전에 가져온 리소스 식별자와 비교하여 이 작업을 수행할 수 있습니다. 디바이스가 제거되어 더 이상 사용할 수 없는 경우 시스템은 DBT_DEVICEREMOVECOMPLETE 디바이스 이벤트를 브로드캐스트합니다.
시스템은 DBT_QUERYCHANGECONFIG 디바이스 이벤트를 브로드캐스트하여 현재 구성(도킹 또는 도킹 취소)을 변경할 수 있는 권한을 요청합니다. 모든 애플리케이션은 요청을 거부하고 변경을 취소하는 BROADCAST_QUERY_DENY 반환할 수 있습니다. 애플리케이션이 요청을 거부하면 시스템에서 DBT_CONFIGCHANGECANCELED 메시지를 보냅니다. 현재 구성이 도크 또는 도킹 취소로 인해 변경된 경우 시스템은 DBT_CONFIGCHANGED 메시지를 보냅니다.
시스템은 디바이스별 이벤트가 발생할 때마다 DBT_DEVICETYPESPECIFIC 디바이스 이벤트를 브로드캐스트합니다.
드라이버는 고유한 사용자 지정 이벤트 유형을 만들 수 있습니다. 사용자 지정 이벤트는 특정 디바이스에서 디바이스 이벤트 알림에 대해 등록된 애플리케이션에만 전송되며 커널 모드 드라이버에서만 시작할 수 있습니다. 자세한 내용은 DBT_CUSTOMEVENT참조하세요.