デバイス イベントの種類
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」をご覧ください。