Win10无线网卡-蓝牙-折腾

一. 前言

事情是这样子的, 在玩all in boom时, 发现作为Wi-Fi信号发射的无线路由太过于碍事和占地方, 准备通过无线网卡, 以win10上自带的移动热点来发射Wi-Fi信号, 这样就完全实现all in boom.

由于对于Wi-Fi没什么高要求, 只需要设备具备2.4G/5G双频即可, 由于主机机箱完全封死, 不准备拆开安装PCIE 无线网卡, 所以在淘宝上随便买了一个不知名品牌(反正全是长得一个模子)的usb无线网卡(集成蓝牙5.3).

img

原本以为就是简单的替换个设备, 但是想不到问题多多...

1.1 产品概况

适配器芯片和绿联WiFi6 USB无线网卡AIC8800D80驱动 | CM762-35264属于同一芯片家族, aic8000, 具体型号则不明, 驱动除了设备上自带的, 试了peckishrine/aic8800_windows_drivers: Windows drivers for AICSemi AIC8800-based USB/PCIe WiFi 6 adapters, 驱动随便套上去也没有报错, 但就是无法正常使用.

蓝牙显示是5.3版本, 但是没有专门的驱动, Windows上的通用驱动可以让设备运行, 但是各种异常, 基本不可用.

1.2 适配器信号改善

img

对于这类USB适配器, 由于其较小的体积, 无外部天线(使用的是如上图的板载天线), 其信号传输很容易收到外界的影响, 随意一些障碍物就足以让信号大幅度衰减.

对此, 可以有以下两步改善这个问题:

  1. 拆掉外部的塑料壳, 这可以进一步改善信号传输质量(对于蓝牙, 那怕是薄塑料都能够导致其信号衰减明显)
  2. 最好的处理是, 手动焊接一小段金属导线上去(焊接时需要小心控制烙铁的温度, 在板载天线的末端轻轻点一点锡上去即可), 这将大幅改善信号传输.

此外, 需要注意蓝牙常见的工作频段 - 2.4GHz, 这也是Wi-Fi的工作频段, 二者很容出现相互干扰的情况.

二. Win10蓝牙设备管理问题

Win10上蓝牙设备的管理存在诸多的问题.

2.1 设备驱动反复安装

先在设备管理上, 勾选这个隐藏设备

img

img

蓝牙设备热插拔导致重复安装对应驱动(灰色的那些).

2.2 无法移除设备

img

windows setting这个残缺的控制板上, 移除设备一直无法响应这种情况很容易出现.

解决方法:

  1. 重新连接设备后, 再断开, 重新执行移除.
  2. 打开控制面板 - 硬件/声音 - 设备/打印机, 找到设备, 移除.
  3. 在设备管理上, 卸载掉所有需要移除设备的驱动, 重启(这种方式可能依然还会存在残余, 可能需要进一步删除掉注册表项).

2.3 没有正确识别为音频设备

img

上图的Generic Bluetooth, 可以让设备勉强运行起来, 但是会存在各种问题, 信号极差, 难以检索到设备, 音频设备没有被正确识别为音频设备.

img

蓝牙音频设备连接后, 没有自动被归类到音频设备(Microsoft Bluetooth Avrcp Transport Driver, 这个驱动也没有安装) 之下, 在声音输出设备上也找不到这个已经连接的蓝牙设备.

在控制面板上 - 找到这个设备, 勾选audio sink这个项.

2.4 外部控制蓝牙的断开和连接

这类涉及硬件的问题, 假如询问AI, 会看到各种离谱上天, 近乎于智障的回答.

如询问: 如何通过python断开win10上的指定的蓝牙连接?(是断开, 不是禁用)

豆包给出的, 看起来很像真实可行的代码:

def list_bluetooth_devices():
    """列出所有已配对的蓝牙设备( 名称+MAC地址+连接状态) """
    ps_command = "Get-BluetoothDevice | Select-Object Name, DeviceAddress, Connected | Format-Table -AutoSize"
    result = subprocess.run(
        ["powershell", "-Command", ps_command],
        capture_output=True,
        encoding="utf-8"
    )
    print("已配对的蓝牙设备列表: \n", result.stdout)

list_bluetooth_devices()

而实际上

PS C:\Windows\system32> Get-BluetoothDevice | Select-Object Name, DeviceAddress, Connected | Format-Table -AutoSize
Get-BluetoothDevice : The term 'Get-BluetoothDevice' is not recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and
try again.
At line:1 char:1
+ Get-BluetoothDevice | Select-Object Name, DeviceAddress, Connected |  ...
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Get-BluetoothDevice:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Get-BluetoothDevice, 这个命令完全是虚构出来的(Get-特定的命令, 这是PowerShell中一种很常见的命令名称), bing/google皆找不到这个命令的存在.

对于这种涉及硬件的问题无能为力(各种胡编), 除了豆包, 其他各家ai也基本是各种瞎说.

import subprocess

device_name = "YourDeviceName"
powershell_cmd = f'Get-PnpDevice -FriendlyName "{device_name}" -Class Bluetooth | Disable-PnpDevice -Confirm:$false'

# Must be run with Administrator privileges
subprocess.run(["powershell", "-Command", powershell_cmd], capture_output=True)

如, Googlegemini给出的这种直接禁用掉的解决方案.

img

而最简单的实现, 就是通过Windows(10/11)自带的开发者模式.

img

只要开启开发者模式, 即可通过http请求的方式读取到蓝牙设备的信息和控制连接与断开.

尽管这个答案出现在stack overflow上, 但是由于这种实现方式极为罕见, ai的拼字游戏无法给出这个答案.

三. 移动热点

img

win10, 这个特性, 不知道微软是不是出于某些目的(例如外部厂商的施压), 问题多多.

img

没有路由器的情况下如何能让安卓手机与Windows10电脑无线直连Smb - 电脑讨论(新) - Chiphell - 分享与交流用户体验

3.1 开启方式

由于蓝牙完全无法使用, 转而求其次, 无线网卡部分功能假如能够正常使用也行.

但这个简单得祈求也难以实现.

Windows 10系统如何分享热点? | 官方支持 | ASUS 中国

img

windows settings上的图形界面操作开启

看似很简单, 实则不然, 这个特性启用, 强制要求设备具有如下情况

  1. 有无线网卡(或者蓝牙)
  2. 设备必须有网卡连接外部设备

但是第二点就很搞了, 这里的网卡连接外部设备, 这个外部设备是不是可以联网, 是不是路由, 都不不是关键, 只要存在网卡连接外部设备, 热点就可以执行"开启"这个操作(否则这个设置会被禁用).

个人的网络相对复杂, 路由使用的是hyperv上运行的istoreos, 所有的物理网卡都虚拟化接入.

本机相关网络设置见: Hyper虚拟机折腾记录 | Lian

如图, Ethernet3 这个物理网卡实际上是没有网络.

img

这个物理网卡和外部的路由器连接(路由器只起桥接的作用), 移动热点就选择这个作为分享网卡的接口. 拔掉路由器的网线, 连接到另一台Linux设备上, 也一样, 这个功能的开启只和网卡有没有外部连接有关, 和连接的设备无关.

img

当启用热点后, 本地会创建一个虚拟网卡, 然后通过联网网卡的分享, 让这个新创建的虚拟网卡可以连接上网络. 这里由于Ethernet3没有网络, 需要手动修改, 将iLan这个网卡分享到新的虚拟网卡上.

img

这个新分享出来的网络, 处于192.168.137.1网段.

img

192.168.137.1

这个网络也能和上级的实现连接.

192.168.2.10

但是性能会出现比较大的下降, 主机ping连接的手机消耗的时间大幅上涨(从 < 1ms, 变成 > 50ms)

经过上述设置, 实现移动热点分享WiFi.

但是当我以为完成任务时, 将无线路由的线拔掉, 网络断了...

Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0

Problem signature:
P1: svchost.exe_SharedAccess
P2: 10.0.19041.5794
P3: 11bd0919
P4: ipnathlp.dll
P5: 10.0.19041.6033
P6: 1cfc553d
P7: c0000005
P8: 000000000002197d
P9:
P10:

3.2 命令行方式

netsh wlan | Microsoft Learn

由于没有注意到热点功能必须有网卡和外部设备连接, 断开无线路由之后网络崩溃之后, 开始尝试使用以下命令方式强制开启

netsh wlan set hostednetwork mode=allow ssid=myspot key=123456@abc

netsh wlan start hostednetwork

C:\Windows\system32>netsh wlan show hostednetwork

Hosted network settings
-----------------------
    Mode                   : Allowed
    SSID name              : "myspot"
    Max number of clients  : 100
    Authentication         : WPA2-Personal
    Cipher                 : CCMP

Hosted network status
---------------------
    Status                 : Started
    BSSID                  : 68:8f:c9:7c:b9:b5
    Radio type             : 802.11b # 这个标准 2.4G专属?
    Channel                : 44 # 这个信号是5G的专属?
    Number of clients      : 0

img

豆包在生成命令行时很容易生产这些看似可以, 实际不存在的命令.

PS D:\Code\python_workspace> netsh wlan set help

The following commands are available:

Commands in this context:
set allowexplicitcreds - Allow or disallow the user to use shared user
                 credentials for network authentication.
set autoconfig - Enable or disable auto configuration logic on interface.
set blockednetworks - Show or hide the blocked networks in visible
                 network list.
set blockperiod - Set the block period.
set createalluserprofile - Allow or disallow everyone to create all user
                 profiles.
set hostednetwork - Set hosted network properties.
set profileorder - Set the preference order of a wireless network profile.
set profileparameter - Set parameters in a wireless network profile.
set profiletype - Set profile type to alluser or peruser.
set randomization - Enable or disable MAC randomization on interface.
set tracing    - Enable or disable tracing.

根本就不存在设置信道的参数.

2.4GHz频段: 覆盖范围广但仅有13个信道, 其中1, 6, 11是完全不重叠的信道( 相当于三条独立车道) , 其余信道存在部分重叠干扰.

5GHz频段: 提供更多信道( 如36-64, 149-165等) , 干扰少, 速度快, 但穿墙能力较弱.

路由器的2.4G信道和5G信道怎么设置为好? 教程来啦! _路由器_什么值得买

一顿操作之后, 很好, 彻底没有网络了, 网卡甚至连WiFi都检索不到了...

猜测是不是命令行方式方式设置的网络和上面的图形界面的设置方式, 二者存在冲突.

准备重置这个命令行的设置

netsh wlan stop hostednetwork

netsh wlan set hostednetwork mode=disallow

PS C:\Windows\system32> netsh wlan show hostednetwork

Hosted network settings
-----------------------
    Mode                   : Disallowed
    SSID name              : "myspot"
    Max number of clients  : 100
    Authentication         : WPA2-Personal
    Cipher                 : CCMP

Hosted network status
---------------------
    Status                 : Not available`

但是不管怎么设置, 也无法恢复到初始得设置

PS C:\Windows\system32> netsh wlan show hostednetwork

Hosted network settings
-----------------------
    Mode                   : Allowed
    Settings               : <Not configured>

Hosted network status
---------------------
    Status                 : Not available

也许是设备问题, 在一台新设备上重新安装win10系统, 无线网卡的功能也无法正常启用.

3.3 ipnathlp持续崩溃

img

此外, 上述的一些列操作引发了一个问题, 那就是网络分享模块不停的崩溃.

崩溃的日志存储路径.

C:\ProgramData\Microsoft\Windows\WER

生成的.wer文件, 直接使用文本编辑器打开即可.

该服务的崩溃的.dump文件在这个目录之下, 但是权限受限.

C:\Windows\System32\config

将日志文件提交给豆包分析.

最可能: ipnathlp.dll 版本与系统版本不兼容

  • 你的系统版本是 19045.6466( 22H2 最新版) , 但 ipnathlp.dll 版本是 10.0.19041.6033( 对应 21H1/21H2 早期版本)
  • 矛盾点: Windows 10 22H2( 19045) 的系统组件版本应同步更新为 10.0.19045.x, 但该 DLL 仍停留在 19041.x, 导致版本不兼容- - 新系统调用旧 DLL 时, 内存布局 / 函数参数不匹配, 触发内存访问违规( c0000005)
  • 原因: 可能是之前的系统更新未完整安装( 如更新中断, 组件损坏) , 导致部分核心 DLL 未同步升级

豆包发挥得很正常, 居然给出了这样的猜测...笑哭, 编得一手好活, 甚至能拿着几个数字就胡扯一通.(汗颜, 我也甚至还特意找了一台系统完全一样的, 安装镜像一样的设备对比这个文件的md5)

不要禁用网络分享相关的服务, 这个服务不仅是热点开启相关, 更重要的部分是为系统提供包括虚拟机网络相关的子网服务.

img

3.4 尾声

为了解决这个模块持续崩溃的问题

sysdm.cpl

运行

img

高级 - 设置 - 最小256k, 试图获得崩溃的dump文件.

但是诡异的是, 重启后, 在日志中找不到崩溃报错了, 同时也没看到有.dump文件生成...

重启几次, 还是没看到日志.

本以为一切安好, 但是上面折腾蓝牙的时候, 反复卸载驱动还是引发了一些问题.

原来的旧设备的蓝牙设备驱动, windows不会自动安装上专门的驱动了...

幸运的是, 系统在折腾前一天由于安装补丁, 自动创建了系统还原点.

img

还好, 系统还原大法...

但是这个系统还原和虚拟机的有所差异, 实体机中的系统还原并非和虚拟机一样完全抹掉新的改变, 恢复还原点的状态, 而是细化了, 抹掉部分设置, 如注册表, 新安装的软件等, 个人文件是不会抹掉.

还原后, 还是存在问题, 之前安装的windbg被抹掉, 但是开始菜单的图标无法移除(也看不到这个图标的位置所在), 同时也导致Listary这个软件出现崩溃, 并且删除配置文件也无法恢复正常, 只能重新安装.

四. 小结

涉及硬件的问题远比纯软件麻烦, 不管是传统的检索还是各种ai黑神话.