0

現在、リモート Bluetooth デバイスによって公開されているサービスを一覧表示し、それらを有効にする方法を探しています。

通常、WindowsAPI 関数 (または既知のラッパーの 1 つ) を使用して、サービスを一覧表示し、GUID (SetServiceEnable) でそれらを有効にします。

問題は、デバイスが同じ GUID を持つ 2 つのサービスを公開していることです。

したがって、windowsAPI 関数を使用すると、これらのサービスの 1 つだけが有効になります。他のサービスを有効にすることはできません。

おそらくWMIでうまくいくと思いましたが、まだWMIに慣れていないので何も見つかりませんでした

Windows 自体は、servicemenu を介して、両方、なし、または特定のサービスを有効にすることができます。

更新 私が解決したい問題は、最初または2番目のサービスを有効にすることです。今のところ、最初のサービス (通常は必要なサービス) のみですが、2 番目のサービスを有効にする解決策が見つかりませんでした (Windows UI を使用する場合を除く)。

両方のサービスが有効になっている場合、devicemanager (SPP) に 2 つの Commports があります。

4

1 に答える 1

-1

コメント/質問を追加できないため(まだstackoverflowの権限がありません)。これが私のベストテイクです。

私の理解が正しければ、サービス レコードでサービスを複数回利用可能にすることは無効ですよね? Bluetooth ペアリング UI でデバイスを右クリックして、2 つのサービスが表示され、Windows UI からそれらを有効にできるかどうかを確認できますか? それらを有効にすると、デバイス マネージャー (接続ごとに表示) のそのデバイスの下に、有効にした 2 つのサービスの対応する反対の役割を持つ 2 つの PNP devnode が表示されますか? (2 つの同一の UUID を持つデバイスを知らないため、これを試すことはできません。)

既にご存知かもしれませんが、リモート デバイスでサービスを有効にしても、実際には Windows Bluetooth API を介してリモート デバイスでサービスを有効にしているわけではありません。あなたがしていることは、Windows のコア bluetooth コンポーネントに、サービスの対応する反対の役割を生成するように指示することです。(これは BluetoothSetLocalServiceInfo が行うことです。) たとえば、リモート デバイスが A2DP シンクをサポートしている場合、そのサービスを有効にすることで、デスクトップ上の Bluetooth サービスはそのデバイスの A2DP ソース サービスを登録し、A2DP ソース ドライバーを一致させるための PNP devnode を生成します。その devnode にインストールします。そのサービスを無効にすることで、Bluetooth サービスは A2DP ソース devnode の登録を解除し、PNP devnode は削除されます (USB デバイスのプラグを抜くようなものです)。

複製されているプロファイルによっては、リモート デバイスの同じ MAC アドレスで一致するデバイス オブジェクトとドライバ オブジェクトの 2 つのインスタンスを使用しても意味がない場合があります。

私の答え(実際にはあなたの質問に答えていません)は、作業するデスクトップ上のドライバーを使用して、その場合にデスクトップ上で2つのサービスを有効にすることさえ有効かどうかを確認することです. たとえば、A2DP と HFP のバンドルでは、AVDTP サスペンドなどの特定の動作を同期するために、A2DP と HFP が必要になります。実装とドライバーによっては、A2DP ドライバーの 2 つのインスタンスがインストールされていると想定していない可能性があり、その結果、ローカル ドライバーの予期しない状態が発生します。

于 2012-07-02T08:22:14.200 に答える