4

我正在寻找一种以编程方式删除由多个蓝牙配对过程创建的虚拟 COM 端口的方法。理想情况下,我想将每个新的配对设备(仅一次)映射到同一个虚拟端口。这可以通过 windows setup api 完成吗?

谢谢,丁斯代尔

4

1 回答 1

1

我会查看 windows DDK 中的 devcon 源代码。我附上了自述文件,这样你就可以看到它有源代码可以完全按照你的意愿去做——禁用串行端口。

开发者大会示例

开发者大会

DevCon 是一个命令行工具,可显示有关设备的详细信息,并允许您从命令行搜索和操作设备。DevCon 启用、禁用、安装、配置和删除本地计算机上的设备,并显示有关本地和远程计算机上的设备的详细信息。DevCon 包含在 Windows DDK 中。

关于本文件

本文档描述了 DevCon 源代码,它包含在 Windows DDK 的 /src/setup/devcon 目录中。它解释了 DevCon 设计,并描述了如何使用 SetupAPI 和设备安装函数来枚举设备并在控制台应用程序中执行设备操作。

有关 DevCon 功能的完整描述和使用说明,请参阅驱动程序开发工具/测试驱动程序/DevCon 中的 DDK 文档中的 DevCon 帮助文件。

范围

这些说明适用于 Windows XP 和 Windows Server 2003。DevCon 设计用于 Windows 2000、Windows XP 和 Windows Server 2003。它不适用于 Windows 95、Windows 98 或 Windows ME。

这个怎么运作

运行“devcon help”将提供命令列表以及每个命令的简短描述。“devcon help” 将对该命令提供更详细的帮助。每个命令的解释是通过位于“cmds.cpp”底部的调度表“DispatchTable”完成的。一些命令使用通用设备枚举器“EnumerateDevices”。当给定远程目标计算机时,其中一些命令将起作用,如果在 Wow64 上使用 32 位 devcon 也将起作用。一些更有趣的函数和它们使用的 API 的描述如下:

cmd类

此命令演示了使用 SetupDiBuildClassInfoListEx 枚举所有设备类 GUID。函数 SetupDiClassNameFromGuidEx 和 SetupDiGetClassDescriptionEx 用于获取有关每个设备类的更多信息。

cmdListClass

此命令演示如何使用 SetupDiClassGuidsFromNameEx 枚举一个或多个与类名匹配的类 GUID。此命令还演示了使用 SetupDiGetClassDevsEx 列出每个类 GUID 的所有设备。

cmdFind cmdFindAll cmdStatus

简单地使用 EnumerateDevices(解释如下)列出设备并显示有关每个设备的不同级别的信息。请注意,除了 cmdFindAll 之外的所有设备都使用 DIGCF_PRESENT 来仅列出有关当前存在的设备的信息。这些和相关设备的主要功能在 FindCallback 中完成。

cmdEnable cmdDisable cmdRestart

这些命令显示如何发出 DIF_PROPERTYCHANGE 来启用设备、禁用设备或重新启动设备。这些命令中的每一个的主要功能都在 ControlCallback 中完成。

这些操作不能在远程机器上或在 Wow64 的上下文中完成。不应使用 CFGMGR32 API,因为它们会跳过类和共同安装程序。

cmd更新

此命令显示如何使用 UpdateDriverForPlugAndPlayDevices 将所有设备的驱动程序更新为特定驱动程序。通常不会指定 INSTALLFLAG_FORCE 以允许 UpdateDriverForPlugAndPlayDevices 确定是否存在已知的更好匹配。在 DevCon 中指定它允许 DevCon 更有效地用作调试/测试工具。这不能在远程机器上或在 Wow64 的上下文中完成。

cmd安装

cmdUpdate 的一种变体,用于在没有关联硬件时安装驱动程序。它创建一个新的根枚举设备实例,并将其与命令行上指定的组成硬件 ID 相关联(应对应于 INF 中的硬件 ID)。这不能在远程机器上或在 Wow64 的上下文中完成。

cmd删除

删除设备的命令。移除的即插即用设备将重新出现以响应 cmdRescan。此命令的主要功能是在演示 DIF_REMOVE 使用的 RemoveCallback 中。这不能在远程机器上或在 Wow64 的上下文中完成。不应使用 CFGMGR32 API,因为它们会跳过类和共同安装程序。

cmd重新扫描

此命令显示了重新扫描之前可能已删除或需要重新扫描以检测它们的所有即插即用设备的正确方法。

cmdDP添加

此命令允许您将驱动程序包添加到机器。此命令的主要功能演示了 SetupCopyOEMInf 的使用。向机器添加驱动程序包并不意味着驱动程序已安装在设备上,它只是意味着当插入新设备或更新现有设备时驱动程序会自动可用。

cmdDP删除

此命令允许您从机器上卸载驱动程序包。此命令的主要功能演示了 SetupUninstallOEMInf 的使用。从机器中删除驱动程序包不会卸载与设备关联的驱动程序。如果您想同时完成这两个操作,请在使用给定驱动程序包的所有设备上使用 cmdRemove,然后使用 cmdDPDelete 从机器中删除驱动程序包本身。此功能在 Windows 2000 或更早版本中不可用。

cmdDPEnum

此命令允许您枚举当前安装在机器上的所有第 3 方驱动程序包,还向您展示如何从驱动程序包中获取一些常见属性(提供程序、类描述、DriverVer 日期和版本)。

cmdDPEnumLegacy

此命令向您展示如何在 Windows Server 2003 和更早的操作系统上枚举第 3 方驱动程序包。

重启

此功能显示如何从硬件安装程序正确重启机器。特别是它会将标志传递给 ExitWindowsEx,从而导致重新启动与硬件安装相关联。您永远不应不必要地重新启动机器。

枚举设备

演示使用 SetupDiGetClassDevsEx 枚举所有设备或所有现有设备,无论是全局还是仅限于特定的安装程序类。演示如何使用 SetupDiCreateDeviceInfoListEx 创建与类关联或不关联的空白列表(大多数情况下,空白列表不需要与类关联)。演示如何使用 SetupDiOpenDeviceInfo 将设备实例添加到设备信息列表中。在将 CFGMGR32 API 与 SETUPAPI API 混合时,最后两个 API 非常适合从设备实例和机器名称获取 DeviceInfoData 结构。调用 SetupDiGetDeviceInfoListDetail 以获取可以传递到 CFGMGR32 API 的远程机器句柄。调用 SetupDiEnumDeviceInfo 以枚举设备信息列表中的每个设备(显式添加,或由对 SetupDiGetClassDevsEx 的调用确定)。实例 ID 通过调用 CM_Get_Device_ID_Ex 获得,使用 devInfo(从 SetupDiEnumerateDeviceInfo 获得)和 devInfoListDetail(从 SetupDiGetDeviceInfoListDetail 获得)中的信息。调用 GetHwIds 以获取硬件和兼容 ID 的列表(如下所述)。一旦确定了感兴趣的设备(通常通过检查硬件 ID),就会调用回调以在该单独设备上进行操作。

GetHwIds

演示如何使用 SetupDiGetDeviceRegistryProperty 获取设备的硬件 ID 或兼容 ID 的完整列表。

获取设备描述

显示如何获取有关设备的描述性信息。如果存在则使用友好名称,否则使用设备描述。

DumpDeviceWithInfo

显示如何在给定 HDEVINFO(设备信息列表)和 PSP_DEVINFO_DATA(设备信息数据)的情况下获取实例 ID(或使用任何 CFGMGR32 API)。

转储设备状态

显示如何解释 CM_Get_DevNode_Status_Ex 返回的信息。有关此 API 返回的信息,请参阅 cfg.h。

转储设备资源

显示如何获取有关设备使用的资源的信息。

转储设备驱动程序文件

作为调试帮助提供,获取有关显然用于设备的文件的信息。它使用 SetupDiBuildDriverInfoList 来获取有关用于指定设备的驱动程序的信息。可以通过调用 SetupDiEnumDriverInfo 枚举与设备关联的驱动程序列表。在这种情况下,列出的驱动程序不会超过一个。此函数继续使用 DIF_INSTALLDEVICEFILES 获取通常会为此驱动程序复制的文件列表。SetupScanFileQueue 用于枚举文件队列以显示与驱动程序关联的文件列表。

DumpDeviceDriverNodes

作为调试辅助,此函数确定设备的兼容驱动程序列表。它使用 SetupDiBuildDriverInfoList 来获取兼容驱动程序的列表。在这种情况下,将枚举所有驱动程序,但通常 DIF_SELECTBESTCOMPATDRV 和 SetupDiGetSelectedDriver 将一起使用以查找操作系统认为最佳的驱动程序。

转储设备堆栈

此函数确定类和设备的上限和下限过滤器。

构建 DEVCON 示例

要构建 devcon 示例:

  1. 单击 Development Kits Build Environments 子菜单中选择的 Build Environment 图标。这将设置正确的构建环境来构建此示例。请注意,此示例将在 64 位环境和 32 位环境中构建。

  2. 在命令窗口中,切换到包含 DevCon 源代码的目录。例如:

cd src\setup\devcon

  1. 使用宏 BLD 或从命令提示符运行以下命令:

构建-c

这将调用生成 Build.log、Build.wrn 和 Build.err 日志文件的 Microsoft make 例程。

构建完成后,可执行文件将放置在 Sources 文件中指定目录的 ObjXXX\I386 子目录中(取决于选择的构建环境)。

如果构建不成功,请检查以下错误:1) 构建环境设置不正确,或 2) 对示例源代码进行的修改引入了错误。

使用开发者大会

DevCon 在 tools\devcon 中以随时可用的形式提供。使用方法请参考 devcon.exe 提供的文档。DevCon 是一个命令行实用程序,通过键入“devcon help”可以获得内置文档。

测试

键入“devcon find *”以列出本地计算机上所有现有设备的设备实例。

键入“devcon status @root\rdp_mou\0000”以列出终端服务器鼠标驱动程序的状态。

键入“devcon status PNP05 ”以列出所有 COM 端口的状态。

于 2011-06-11T23:45:08.410 回答