Windows Bluetooth LE GATT ライブラリを使用して、BLE 対応デバイス D に接続してペアリングしています。D のストレージ スペースは限られているため、N 個を超えるクライアントが結合すると、最初の長期キーが削除されます。ボンディング中に作成されたペア。
このキー ペアが削除されたデバイスが Windows Enabled マシンであったとします。これを W としましょう。次に W が D との接続を試みるとき、W から LTK_Request_Event を受信すると、Long_Term_Key_Requested_Negative_Reply で応答し、W は接続を終了します。
しかし、ここで物事が本当に腹立たしくなります。Windows BLE スタックはこの応答を認識しているように見えますが (切断されるため)、これは Bluetooth LE GATT ライブラリを使用するアプリケーションにダウンストリームで伝達されていないようです。実際、アプリケーション側からは、ペアリング要求は「Already Paired」で返されますが、何か問題があったことを示すものではありません。もちろん、アプリケーションが保護された特性にアクセスしようとすると、アクセスできなくなります。これまでのところ、ペアリングが成功しなかったことを示す唯一の兆候です。さらに悪いことに、受け取るエラーには一貫性がありません。場合によっては、「到達不能」になります。時々、プロトコル エラーが発生します。それ以外の場合は、ABORT を受け取ります。
ここで、ヒューリスティックとして、このケースの検出を、再ペアリングを試行するための基準として使用できます。残念ながら、これは理想的ではありません。これらのエラーはいずれも、デバイスが LTK を受け入れなくなったことを実際に示すものではなく、代わりに、デバイスが範囲外であるなどの他の問題を示している可能性があるためです。
既存の LTK がデバイスによって拒否されたことを検出する方法はありますか?