複数の Bluetooth ペアリング プロセスによって作成された仮想 COM ポートをプログラムで削除する方法を探しています。理想的には、すべての新しいペアリングされたデバイス (一度にのみ) を同じ仮想ポートにマップしたいと考えています。これは Windows セットアップ API を介して行うことができますか?
ありがとう、ディンズデール
複数の Bluetooth ペアリング プロセスによって作成された仮想 COM ポートをプログラムで削除する方法を探しています。理想的には、すべての新しいペアリングされたデバイス (一度にのみ) を同じ仮想ポートにマップしたいと考えています。これは Windows セットアップ API を介して行うことができますか?
ありがとう、ディンズデール
Windows DDK の devcon ソース コードを調べます。readme を添付したので、必要なことを正確に行うためのソースがあることがわかります。シリアル ポートを無効にします。
DevCon サンプル
DEVCON
DevCon は、デバイスに関する詳細情報を表示するコマンド ライン ツールであり、コマンド ラインからデバイスを検索および操作できます。DevCon は、ローカル コンピューター上のデバイスを有効化、無効化、インストール、構成、および削除し、ローカルおよびリモート コンピューター上のデバイスに関する詳細情報を表示します。DevCon は Windows DDK に含まれています。
このドキュメントについて
このドキュメントでは、Windows DDK の /src/setup/devcon ディレクトリに含まれている 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 の説明は次のとおりです。
cmdClasses
このコマンドは、SetupDiBuildClassInfoListEx を使用してすべてのデバイス クラス GUID を列挙する方法を示しています。関数 SetupDiClassNameFromGuidEx および SetupDiGetClassDescriptionEx を使用して、各デバイス クラスに関する詳細情報を取得します。
cmdListClass
このコマンドは、SetupDiClassGuidsFromNameEx を使用して、クラス名に一致する 1 つ以上のクラス 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 に応答して再表示されます。このコマンドの主な機能は、DIF_REMOVE の使用を示す RemoveCallback にあります。これは、リモート マシンまたは Wow64 のコンテキストでは実行できません。CFGMGR32 API は、クラスと共同インストーラーをスキップするため、使用しないでください。
cmdRescan
このコマンドは、以前に削除された可能性があるすべてのプラグ アンド プレイ デバイス、または検出するために再スキャンが必要なすべてのプラグ アンド プレイ デバイスを再スキャンする正しい方法を示します。
cmdDPAdd
このコマンドを使用すると、ドライバー パッケージをコンピューターに追加できます。このコマンドの主な機能は、SetupCopyOEMInf の使用を示しています。ドライバー パッケージをマシンに追加しても、デバイスにドライバーがインストールされるわけではありません。単に、新しいデバイスが接続されたとき、または既存のデバイスが更新されたときに、ドライバーが自動的に使用可能になることを意味します。
cmdDPDelete
このコマンドを使用すると、コンピューターからドライバー パッケージをアンインストールできます。このコマンドの主な機能は、SetupUninstallOEMInf の使用を示しています。マシンからドライバー パッケージを削除しても、デバイスに関連付けられているドライバーはアンインストールされません。両方を達成したい場合は、特定のドライバー パッケージを使用するすべてのデバイスで cmdRemove を使用し、次に cmdDPDelete を使用してドライバー パッケージ自体をマシンから削除します。この機能は、Windows 2000 以前では使用できません。
cmdDPEnum
このコマンドを使用すると、現在マシンにインストールされているすべてのサード パーティ製ドライバー パッケージを列挙できます。また、ドライバー パッケージからいくつかの一般的なプロパティ (プロバイダー、クラスの説明、DriverVer の日付とバージョン) を取得する方法も示されます。
cmdDPEnumLegacy
このコマンドは、Windows Server 2003 以前のオペレーティング システムでサード パーティのドライバー パッケージを列挙する方法を示しています。
リブート
この関数は、ハードウェア インストール プログラムからマシンを正しく再起動する方法を示しています。特に、再起動をハードウェアのインストールに関連付けるフラグを ExitWindowsEx に渡します。不必要にマシンを再起動しないでください。
列挙デバイス
SetupDiGetClassDevsEx を使用して、グローバルに、または特定のセットアップ クラスに限定して、すべてのデバイスまたは存在するすべてのデバイスを列挙する方法を示します。SetupDiCreateDeviceInfoListEx を使用して、クラスに関連付けられているかどうかに関係なく空白のリストを作成する方法を示します (ほとんどの場合、空白のリストをクラスに関連付ける必要はありません)。SetupDiOpenDeviceInfo を使用して、デバイス インスタンスをデバイス情報リストに追加する方法を示します。これらの最後の 2 つの API は、CFGMGR32 API と SETUPAPI API を混在させる場合に、デバイス インスタンスとマシン名から DeviceInfoData 構造体を取得するのに理想的です。SetupDiGetDeviceInfoListDetail を呼び出して、CFGMGR32 API に渡すことができるリモート マシン ハンドルを取得します。SetupDiEnumDeviceInfo は、デバイス情報リストにあるすべてのデバイスを列挙するために呼び出されます (明示的に追加された、または SetupDiGetClassDevsEx の呼び出しによって決定されます)。インスタンス ID は、devInfo (SetupDiEnumerateDeviceInfo から取得) および devInfoListDetail (SetupDiGetDeviceInfoListDetail から取得) の情報を使用して、CM_Get_Device_ID_Ex を呼び出すことによって取得されます。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 を呼び出すことによって列挙できます。この場合、リストされるドライバーは 1 つだけです。この関数は、DIF_INSTALLDEVICEFILES を使用して、このドライバー用に通常コピーされるファイルのリストを取得します。SetupScanFileQueue は、ファイル キューを列挙して、ドライバーに関連付けられているファイルの一覧を表示するために使用されます。
DumpDeviceDriverNodes
デバッグ支援として提供されるこの関数は、デバイスの互換性のあるドライバーのリストを決定します。SetupDiBuildDriverInfoList を使用して、互換性のあるドライバーのリストを取得します。この場合、すべてのドライバーが列挙されますが、通常は DIF_SELECTBESTCOMPATDRV と SetupDiGetSelectedDriver を一緒に使用して、OS が最適と見なすドライバーを見つけます。
DumpDeviceStack
この関数は、クラスとデバイスの上限フィルターと下限フィルターを決定します。
DEVCON サンプルのビルド
devcon サンプルをビルドするには:
Development Kits Build Environments サブメニューで選択した Build Environment アイコンをクリックします。これにより、このサンプルをビルドするための正しいビルド環境がセットアップされます。このサンプルは、32 ビット環境だけでなく 64 ビット環境でもビルドされることに注意してください。
コマンド ウィンドウで、DevCon ソース コードを含むディレクトリに移動します。例えば:
cd src\setup\devcon
ビルド –c
これにより、Build.log、Build.wrn、および Build.err ログ ファイルを生成する Microsoft の make ルーチンが呼び出されます。
ビルドが完了すると、ソース ファイルで指定されたディレクトリの 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 ポートのステータスを一覧表示します。