Windows 10とXPのデュアルブート環境でLogicool K380キーボードを使用しているのだが、これが一度ペアリングすると片方のOSでしか使えない。しかも、K380は3デバイスまで切替でペアリング可能なのだが、各OSを別々のデバイスとしてペアリング設定しても、直近のペアリング設定しか使えない。これは何事かと思ったのだが、どうも相性問題ではなくBluetoothの仕様上発生する問題で、解決方法としては各OSがペアリング時にランダムで設定するリンクキーなるものを同じ値で統一して設定させればいいらしい。
症状
同じBluetoothレシーバを使用する1台のPCで複数のOSをインストールしたマルチブート環境にて、片方のOSでペアリングを設定すると他のOSではペアリング設定が機能しなくなる。状態欄にはペアリング設定済みと表示されるが、接続済みにはならず接続されない。
解決方法
普通は下の方法の通りにやれば上手くいく。
→ マルチブート環境の全OSで同じBluetoothデバイスを使う - hnwの日記
私の場合はWindows 10とWindows XPのデュアルブート環境で、Windows 10の場合は標準ドライバが使われるが、Windows XPでは使っている中華製 CSR BluetoothのCDから別途ドライバをインストールした関係か、リンクキーの場所やデータの保存方法が異なっていたため、少し手こずった。
Windows XPかつCSR (Cambridge Silicon Radio) 製Bluetoothドライバの場合、リンクキーは次の場所にある。
| レジストリキー | 名前 | データ型 |
| HKLM\SYSTEM\CurrentControlSet\Services\CsrBtPort | ScDbData | BINARY |

中身は複数デバイスのリンクキーを含むバイナリデータになっていて、ここから該当デバイスのリンクキーを探るのは少し手間が掛かる。
まず、一度デバイスをペアリングした状態で、ScDbDataをファイルにエクスポートしておく。次に、デバイスを削除して再度ペアリングした状態でScDbDataを別のファイルにエクスポートしておく。リンクキーはペアリングを行う毎に変わるので、バイナリ中でデータが変わっている部分が該当デバイスのリンクキーのはず。

2つのファイルを差分比較してみる。ちょうど16バイト分だけ値が異なる場所 (e0 6a 7f d3 7e 77 59 4e 61 d9 ce 09 18 cf e6 6b) があるのでこれがXP側のリンクキーか。
Windows 10標準ドライバを使用している場合、リンクキーが保存されている場所はSYSTEMユーザー(管理者権限ユーザーとは異なる)でないとアクセスできないらしい。レジストリエディターをSYSTEMユーザーとして実行するために、PsExecを使う。コマンドpsexec -s -i regeditを実行する。ただし、PowerShellから実行する場合は./psexec -s -i regedit。

キーの場所はHKLM\System\CurrentControlSet\services\BTHPORT\Parameters\Keysで、BDアドレス(接続機器)毎にサブキーが置かれるらしい。Bluetooth機器一つしか繋いでないのなら、一つしかぶら下がっていないのでそれを開く。

名前にある34885d987a2eという文字列。バイト毎に逆にすると2e 7a 98 5d 88 34。これ、さっきのScDbDataにも似たようなバイナリがあるのでそれっぽい。この項目のバイナリを先ほどの差分比較で判明したXPのリンクキーに置き換える。

キーボードの電源を入れ直してみる。Windows 10でも使えるようになった。表示も「接続済み」になったよ。パーでき!やったね!

(EOF)
参考サイト
問題解決の参考になった資料。感謝!
- マルチブート環境の全OSで同じBluetoothデバイスを使う - hnwの日記 http://d.hatena.ne.jp/hnw/20150308
- Where to find Bluetooth link keys in the Windows registry for the EkoBuy USB dongle / CSR Harmony… https://medium.com/@richardvigars/where-to-find-bluetooth-link-keys-in-the-windows-registry-for-the-ekobuy-usb-dongle-csr-harmony-b7777c90b41