エンドポイント ID 文字列
Windows Vista では、システムによってエンドポイント ID 文字列が生成され、システム内のオーディオ エンドポイント デバイスが識別されます。 エンドポイント ID 文字列は、null で終わるワイド文字の文字列です。 特定のオーディオ エンドポイント デバイスのエンドポイント ID 文字列は、システム内のすべてのオーディオ エンドポイント デバイス間でデバイスを一意に識別します。
システムに 2 つ以上の同一のオーディオ アダプター デバイスが含まれている場合、対応するオーディオ エンドポイント デバイスのフレンドリ名は同じですが、各エンドポイント デバイスには一意のエンドポイント ID 文字列が含まれています。 エンドポイント デバイスのフレンドリ名の取得について詳しくは、「デバイスのプロパティ」をご覧ください。
オーディオ エンドポイント デバイスの IMMDevice インターフェイス インスタンスを取得した後、クライアントは IMMDevice::GetId メソッドを呼び出してデバイスのエンドポイント ID 文字列を取得できます。 クライアントは、エンドポイント ID 文字列を使用し、IMMDeviceEnumerator::GetDevice メソッドを呼び出すことにより、後で、または別のプロセスでオーディオ エンドポイント デバイスのインスタンスを作成できます。
クライアントは、オーディオ エンドポイント デバイスの状態が変化したときに通知を受信するよう手配できます。 通知を受信するため、クライアントは IMMNotificationClient インターフェイスを実装し、そのインターフェイスを MMDevice API に登録します。 エンドポイント デバイスの状態が変わると、MMDevice API はクライアントの EDataFlow インターフェイスで適切なメソッドを呼び出します。 メソッドへの入力パラメーターの 1 つは、状態が変更されたエンドポイント デバイスを識別するエンドポイント ID 文字列です。 EDataFlow について詳しくは、「デバイス イベント」をご覧ください。
DirectSound や Windows マルチメディア関数などのレガシ オーディオ API には、オーディオ デバイスを列挙および識別するための独自のインターフェイスがあります。 Windows Vista では、これらのインターフェイスは、API によって提示されるデバイス抽象化の基になるエンドポイント デバイスを識別するエンドポイント ID 文字列を提供するよう拡張されています。
DirectSound デバイスの列挙時、DirectSound は列挙する各デバイスのエンドポイント ID 文字列を提供します。 詳しくは、「レガシ オーディオ アプリケーションのオーディオ イベント」をご覧ください。
レガシ波形デバイスのエンドポイント ID 文字列を取得するには、waveOutMessage または waveInMessage 関数を使用して、波形デバイス ドライバーに DRV_QUERYFUNCTIONINSTANCEID メッセージを送信します。 このメッセージの使用方法を示すコード例については、「レガシ Windows マルチメディア アプリケーションのデバイス ロール」をご覧ください。
コア オーディオ API の機能を使用して、レガシ オーディオ API を使用するアプリケーションを強化する方法について詳しくは、「レガシ オーディオ API との相互運用性」をご覧ください。
クライアントは、エンドポイント ID 文字列の内容を不透明として扱う必要があります。 つまり、クライアントが文字列の内容を解析してデバイスに関する情報を取得してはなりません。 その理由は、文字列形式が未定義であり、MMDevice API システム モジュールの実装から次の実装に変わる可能性があるためです。
エンドポイント ID 文字列の有効期間は、デバイスのインストールに関連付けられています。 デバイスのエンドポイント ID 文字列は、ユーザーがデバイス ドライバーをアップグレードした場合、またはユーザーがデバイスをアンインストールして再インストールした場合に変更されます。 ただし、エンドポイント ID 文字列はシステムの再起動後も変わりません。ユーザーがデバイスを取り外して再度接続した場合、USB オーディオ デバイスのエンドポイント ID 文字列は変わりません。
関連トピック