我正在寻找一种以编程方式删除由多个蓝牙配对过程创建的虚拟COM端口的方法。理想情况下,我想将每个新配对的设备(只能一次)映射到同一虚拟端口。可以通过Windows Setup API完成此操作吗?
谢谢,
丁斯代尔
最佳答案
我将在Windows DDK中查看devcon源代码。我已经附上了自述文件,因此您可以看到它具有可以完全执行您想要的源的功能-禁用串行端口。
DevCon示例
DEVCON
DevCon是一个命令行工具,可显示有关设备的详细信息,并允许您从命令行搜索和操作设备。 DevCon启用,禁用,安装,配置和删除本地计算机上的设备,并显示有关本地和远程计算机上设备的详细信息。 DevCon包含在Windows DDK中。
关于本文件
本文档描述了DevCon源代码,该源代码包含在Windows DDK中的/src/setup/devcon目录中。它解释了DevCon设计,并描述了如何使用SetupAPI和设备安装功能枚举设备并在控制台应用程序中执行设备操作。
有关DevCon功能的完整说明和使用说明,请参阅驱动程序开发工具/测试驱动程序/DevCon的DDK文档中的DevCon帮助文件。
范围
这些说明适用于Windows XP和Windows Server2003。DevCon设计用于Windows 2000,Windows XP和Windows Server2003。它在Windows 95,Windows 98或Windows ME上不起作用。
怎么运行的
运行“devcon帮助”将提供命令列表以及每个命令的简短说明。 “devcon help”将对该命令提供更详细的帮助。每个命令的解释是通过位于“cmds.cpp”底部的调度表“DispatchTable”完成的。一些命令使用通用设备枚举器“EnumerateDevices”。当给定远程目标计算机时,其中一些命令将起作用,如果在Wow64上使用32位devcon,这些命令也将起作用。一些更有趣的功能及其使用的API的描述如下:
cmdClasses
此命令演示了如何使用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关联(该硬件ID应与INF中的硬件ID相对应)。这不能在远程计算机上或在Wow64上下文中完成。
cmd删除
删除设备的命令。响应cmdRescan,被删除的即插即用设备将重新出现。该命令的主要功能在RemoveCallback中,该功能演示了DIF_REMOVE的用法。这不能在远程计算机上或在Wow64上下文中完成。 CFGMGR32 API不应使用,因为它们会跳过类和共同安装程序。
命令重新扫描
此命令显示了重新扫描所有以前已卸下或需要重新扫描才能检测到的即插即用设备的正确方法。
cmdDPAdd
此命令允许您将驱动程序包添加到计算机。此命令的主要功能演示了SetupCopyOEMInf的用法。在计算机上添加驱动程序包并不意味着驱动程序已安装在设备上,仅意味着在插入新设备或更新现有设备时驱动程序将自动可用。
cmdDPDelete
此命令使您可以从计算机上卸载驱动程序包。此命令的主要功能演示了SetupUninstallOEMInf的用法。从计算机中删除驱动程序包不会卸载与设备关联的驱动程序。如果要同时完成这两个操作,请在使用给定驱动程序包的所有设备上使用cmdRemove,然后使用cmdDPDelete从计算机中删除驱动程序包本身。 Windows 2000或更早版本中没有此功能。
cmdDPEnum
此命令使您可以枚举机器上当前安装的所有第三方驱动程序包,并还向您展示如何从驱动程序包中获取一些常用属性(提供程序,类说明,DriverVer日期和版本)。
cmdDPEnumLegacy
此命令显示如何枚举Windows Server 2003和更早版本的操作系统上的第三方驱动程序包。
重启
此功能显示如何从硬件安装程序正确重新引导计算机。特别是它将标志传递给ExitWindowsEx,该标志导致重新启动与硬件安装相关联。切勿不必要地重启计算机。
枚举设备
演示如何使用SetupDiGetClassDevsEx枚举全局或限于特定安装程序类的所有设备或所有现有设备。演示如何使用SetupDiCreateDeviceInfoListEx创建与类关联或不与类关联的空白列表(在大多数情况下,无需将空白列表与类关联)。演示如何使用SetupDiOpenDeviceInfo将设备实例添加到设备信息列表中。当将CFGMGR32 API与SETUPAPI API混合使用时,最后两个API是从设备实例和机器名称获取DeviceInfoData结构的理想选择。调用SetupDiGetDeviceInfoListDetail来获取可以传递到CFGMGR32 API的远程计算机句柄。调用SetupDiEnumDeviceInfo以枚举设备信息列表中的每个设备(显式添加或由对SetupDiGetClassDevsEx的调用确定)。使用devInfo(从SetupDiEnumerateDeviceInfo获取)和devInfoListDetail(从SetupDiGetDeviceInfoListDetail获取)中的信息,通过调用CM_Get_Device_ID_Ex获得实例ID。调用GetHwIds以获得硬件和兼容ID的列表(如下所述)。一旦确定了有趣的设备(通常通过检查硬件ID),便会调用该回调以在该单个设备上进行操作。
GetHwIds
显示如何使用SetupDiGetDeviceRegistryProperty获取设备的硬件ID或兼容ID的完整列表。
GetDeviceDescription
显示如何获取有关设备的描述性信息。如果存在友好名称,则使用该友好名称,否则使用设备描述。
DumpDeviceWithInfo
显示在给定HDEVINFO(设备信息列表)和PSP_DEVINFO_DATA(设备信息数据)的情况下如何获取实例ID(或使用任何CFGMGR32 API)。
DumpDeviceStatus
显示如何解释CM_Get_DevNode_Status_Ex返回的信息。有关此API返回的信息,请引用cfg.h。
DumpDeviceResources
显示如何获取有关设备使用的资源的信息。
DumpDeviceDriverFiles
作为调试工具提供,获得有关显然用于设备的文件的信息。它使用SetupDiBuildDriverInfoList来获取有关用于指定设备的驱动程序的信息。可以通过调用SetupDiEnumDriverInfo枚举与设备关联的驱动程序列表。在这种情况下,列出的驱动程序将不超过一个。此函数将继续获取通常使用DIF_INSTALLDEVICEFILES为此驱动程序复制的文件列表。 SetupScanFileQueue用于枚举文件队列以显示与驱动程序关联的文件列表。
DumpDeviceDriverNodes
作为调试工具,此功能确定设备的兼容驱动程序列表。它使用SetupDiBuildDriverInfoList获取兼容驱动程序的列表。在这种情况下,将枚举所有驱动程序,但是通常将DIF_SELECTBESTCOMPATDRV和SetupDiGetSelectedDriver一起使用,以查找OS认为最佳的驱动程序。
转储设备堆栈
此函数确定类别和设备的上下过滤器。
构建DEVCON样本
要构建devcon示例:
cd src\setup\devcon
建立–c
这将调用Microsoft生成例程,该例程生成Build.log,Build.wrn和Build.err日志文件。
构建完成后,可执行文件将放置在Sources文件中指定目录的ObjXXX\I386子目录中(取决于所选的构建环境)。
如果构建不成功,请检查以下错误:1)构建环境未正确设置,或2)对示例源代码引入的错误进行了修改。
使用DEVCON
DevCon以现成的形式提供在tools\devcon中。有关用法,请参阅devcon.exe随附的文档。 DevCon是一个命令行实用程序,带有内置文档,可通过键入“devcon help”获得。
测试中
键入“devcon find *”以列出本地计算机上所有现有设备的设备实例。
键入“devcon status @root\rdp_mou\0000”以列出终端服务器鼠标驱动程序的状态。
键入“devcon status PNP05”以列出所有COM端口的状态。
关于c# - 以编程方式在Windows中删除COM端口(Setup API吗?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5646592/