蓝牙低功耗连接参数更新-设备或窗口导致HRESULT: 0x80070005 (E_ACCESSDENIED))

本文关键字:HRESULT 0x80070005 ACCESSDENIED 窗口 参数 连接 低功耗 更新 | 更新日期: 2023-09-27 18:07:15

我正在尝试写入GAP服务(0x180)特征和0x2A04

每当我尝试写入0x2A04(连接参数)或0x0200(设备名称)时,

    var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromShortId(0x1800));
    var service = await GattDeviceService.FromIdAsync(devices[0].Id);
    var gapData = service.GetCharacteristics(new Guid("00002A04-0000-1000-8000-00805f9b34fb"))[0];
    var raw = await gapData.ReadValueAsync();
    byte[] conParas = new byte[raw.Value.Length];
    DataReader.FromBuffer(raw.Value).ReadBytes(conParas);
    //I can breakpoint and verify that the read works fine
    var status = await gapData.WriteValueAsync(conParas.AsBuffer());

并调用WriteValueAsync(),程序在那一行中断我的异常是

类型为'System '的异常。UnauthorizedAccessException'发生在Mscorlib.dll,但未在用户代码中处理

附加信息:Access is denied。(来自HRESULT的例外:0 x80070005 (E_ACCESSDENIED))

我不太确定参数被拒绝的堆栈的哪个级别-我甚至不知道参数是否到达BLE设备。然而,由于我可以写入其他GATT服务并从GAP特征中读取,我相信它是设备。

有谁能找到一个万无一失的方法来发现这个问题的来源吗?

谢谢托马斯。

蓝牙低功耗连接参数更新-设备或窗口导致HRESULT: 0x80070005 (E_ACCESSDENIED))

我以前遇到过这个问题。看来微软不喜欢你给GAP写信。

我建议您构建您的Gatt.XML,以便它在GAP中只包含"名称"answers"外观"服务(只有这两个服务),然后将剩余的特征放在自定义服务或标准服务之下。

如果您尝试写入自定义服务下启用写入的特性,它应该可以工作。

概要:您不能在GAP下写入特征。

参考:重组我的设备的Gatt.XML为我解决了同样的问题。

额外的细节:对于这些"访问拒绝"错误,您需要检查:1)您可以手动编辑包清单功能,以包含您的Gatt.XML具有的服务。您必须指定自定义服务和标准服务。2)您的Gatt.XML结构正确。3)您试图写入的特征存在/设备当前已配对。

欢呼,Togepi

相关文章: