概要
Portmon は、システムのシリアル ポートとパラレル ポートで行われている活動を監視および表示するユーティリティです。高度なフィルター機能や検索機能を備えており、Windows の動作を調査したり、アプリケーションがポートを使用する方法を確認したり、システムやアプリケーションの構成における問題を検出したりするのに役立ちます。
Portmon
Portmon には、多くの強力な機能が揃っています。
- リモート監視: TCP/IP 経由 (インターネット経由も含む) でアクセスできる任意のコンピューターから、カーネル モード デバッグの出力や Win32 デバッグの出力をキャプチャします。複数のリモート コンピューターを同時に監視できます。Windows NT か Windows 2000 システムで Portmon を実行し、同じネットワーク コンピューターの別の Windows NT か Windows 2000 システムから出力をキャプチャする場合、クライアント ソフトウェアは自動的にインストールされます。
- 最近選択したフィルターの一覧: 強力なフィルター機能によって拡張された Portmon では、最近選択したフィルターの情報が保持されます。また、簡単に再選択できるインターフェイスも用意されています。
- クリップボードへのコピー: 出力ウィンドウで複数の行をコピーして、内容をクリップボードにコピーできます。
- 強調表示: 強調表示フィルターの条件と一致するデバッグの出力を強調表示します。また、強調表示する色をカスタマイズすることもできます。
- ログ ファイルへの記録: デバッグの出力をキャプチャして、その内容をファイルに書き込みます。
- 印刷: キャプチャしたデバッグの出力の全部または一部をプリンターで印刷します。
- 1 ファイル分のペイロード: Portmon は 1 つのファイルとして実装されています。
オンラインのヘルプ ファイルでは、上記の機能を含む、さまざまな機能について詳しい情報が提供されています。
インストールと使用方法
Portmon のプログラム ファイル (portmon.exe) を実行すると、すぐに Portmon でデバッグの出力のキャプチャが開始されます。Windows 95 で Portmon を実行するには、マイクロソフトが提供している WinSock2 更新プログラムを Windows 95 にインストールする必要があります。Windows NT か Windows 2000 で Portmon を実行する場合は、portmon.exe をネットワーク ドライブ以外のドライブに配置する必要があることと、管理者特権が必要になることに注意してください。メニュー、ホット キー、またはツール バーのボタンを使用して、ウィンドウに表示された出力をクリアしたり、出力を検索したり、ウィンドウのフォントを変更したりすることができます。オンライン ヘルプでは、Portmon のすべての機能について説明しています。
Portmon では、すべてのシリアル ポートとパラレル ポートの I/O コントロール (IOCTL) コマンドが認識され、コマンドは、コマンドと関連付けられているパラメーターに関する興味深い情報と共に表示されます。Portmon では、読み取りおよび書き込み要求に、バッファの先頭にある数十バイトを表示します。出力できない文字は '.' で表されます。[Show Hex] (16 進数表示) オプションを使用すると、バッファ データの表示を、ASCII と未処理の 16 進数の出力の間で切り替えることができます。
Portmon のしくみ (Windows NT の場合)
Portmon の GUI では、シリアル ポートとパラレル ポートを特定します。これは、HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm で構成されているシリアル ポートと HKEY_LOCAL_MACHINE\Hardware\DeviceMap\Parallel Ports で定義されているパラレル ポートを列挙することで実行されます。これらのキーには、シリアル ポート デバイスおよびパラレル ポート デバイスの名前と、Win32 がアクセス可能な名前の間のマッピング情報が格納されています。
監視するポートを選択すると、Portmon では、監視するポートの NT 名 (\device\serial0 など) を含むデバイス ドライバーに要求を送信します。ドライバーは、標準的なフィルタリング API を使用して、監視するデバイス オブジェクトに固有のフィルター デバイス オブジェクトをアタッチします。まず、ZwCreateFile を使用して、監視対象のデバイスを開きます。その後、ZwCreateFile から返されたハンドルをデバイス オブジェクト ポインターに変換します。監視するポートの特性と一致する固有のフィルター デバイス オブジェクトを作成したら、ドライバーでは、IoAttachDeviceByPointer を呼び出してフィルターを作成します。それ以降、Portmon ドライバーでは、監視対象のデバイスに対するすべての要求を認識するようになります。
Portmon には、アプリケーションとドライバーがポートから状態情報を構成して読み取るために使用する主な方法である、すべての標準シリアル ポートの IOCTL と標準パラレル ポートの IOCTL に関する知識が組み込まれています。IOCTL は、\ddk\src\comm\inc\ntddser.h および \ddk\src\comm\inc\ntddpar.h の 2 つの DDK ファイルで定義されています。また、DDK で文書化されているものもいくつかあります。
Portmon のしくみ (Windows 9x の場合)
Windows 95 と Windows 98 で実行した場合、Portmon の GUI では、動的に読み込まれる VxD を使用して、シリアルな活動とパラレルな活動をキャプチャします。Windows VCOMM (仮想通信) デバイス ドライバーは、パラレル デバイスとシリアル デバイスのインターフェイスとして機能するため、ポートにアクセスするアプリケーションは、このサービスを間接的に使用します。Portmon の VxD では、標準的な VxD サービスのフックを使用して、VCOMM の機能へのすべてのアクセスをインターセプトします。Portmon の VxD は、Portmon の NT デバイス ドライバーのように、要求を解釈して、読みやすい形式で表示します。Portmon を Windows 9x で実行すると、すべてのポートが監視対象となるので、NT とは異なりポートを選択する必要はありません。
Portmon のダウンロード
(139 KB)
Live.Sysinternals.com から直接 Portmon を実行する