2011-04-13 98 views
4

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

感谢, dinsdale

+0

与WMI班级友好... – ildjarn 2011-04-13 08:50:09

+1

任何建议首先看什么?我知道WMI主要用于检索系统信息(如大多数示例所示)。你知道解释系统配置本身的资源吗? – 2011-04-13 11:21:15

+0

我不确定哪个类完全代表一个COM端口,但[this](http://msdn.microsoft.com/en-us/library/aa389273(VS.85).aspx)是一个很好的开始。 – ildjarn 2011-04-13 22:23:33

回答

1

我想看看在Windows DDK压缩DevCon的源代码。我附上了自述文件,以便您可以看到它的源代码正是您想要的 - 禁用串行端口。

开发者大会样品

DEVCON

开发者大会是一个命令行工具,显示有关设备的详细信息,并可以搜索和处理命令行的设备。 DevCon启用,禁用,安装,配置和删除本地计算机上的设备,并显示有关本地和远程计算机上设备的详细信息。 DevCon包含在Windows DDK中。

关于本文档

本文档描述了开发者大会的源代码,其被包括在Windows DDK在/ SRC /安装/ DEVCON目录。它解释了DevCon设计,并介绍了如何使用SetupAPI和设备安装功能枚举设备并在控制台应用程序中执行设备操作。

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

范围

这些说明适用于Windows XP和Windows Server 2003的开发者大会是专为使用在Windows 2000,Windows XP和Windows Server 2003中它不会工作在Windows 95,Windows 98中,或Windows我。

它是如何工作

运行“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,因为它们会跳过类和联合安装程序。

cmdUpdate

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

cmdInstall

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

cmdRemove

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

cmdRescan

此命令将显示重新扫描可能以前已被删除,或否则需要重新扫描检测到它们所有插件&播放设备的正确方法。

cmdDPAdd

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

cmdDPDelete

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

cmdDPEnum

此命令可以枚举所有当前机器上安装的第三方驱动程序包和还介绍了如何从一个驱动程序包(提供者,类描述,DriverVer日期一些共同的属性和版)。

cmdDPEnumLegacy

该命令显示出如何枚举Windows Server 2003和更早版本的操作系统上的第三方驱动程序包。

重启

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

EnumerateDevices

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

GetHwIds

显示了如何获得的硬件ID或兼容ID的完整列表,使用SetupDiGetDeviceRegistryProperty的设备。

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一起查找操作系统认为哪个驱动程序最好。

DumpDeviceStack

这个函数确定类和设备上部和下部过滤器。

建设DEVCON样品

要构建压缩DevCon示例:

  1. 点击选择的生成环境图标在开发工具包构建环境的子菜单。这将设置正确的构建环境来构建此示例。请注意,此示例将构建在64位环境以及32位环境中。

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

CD SRC \设置\ DEVCON

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

构建-c

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

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

如果构建失败,请检查以下错误:1)构建环境设置不正确;或者2)对示例源代码所做的修改引入了错误。

使用DEVCON

开发者大会是现成的运行形式提供工具\ DEVCON。有关用法,请参阅随devcon.exe提供的文档。 DevCon是一个命令行实用程序,可通过键入“devcon help”获得内置文档。

测试

类型“DEVCON找到*”可以列出本地机器上的所有本装置的设备实例。

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

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

+0

嗨伊万,看起来很有前途!谢谢 – 2011-06-15 07:34:55