2004-07-21(Wed) [長年日記]
_ ポート番号からプロセスID
fportだと、うちの2000サーバはお亡くなりになったことがあったらしい。どうも5分に一回psexecを使って統計データを取ってたことがあったのだが、ブルースクリーンが出たとか。
うーん、しかしどうしてもポート番号から対象プロセスIDは調べないといけないし...こまった。
fport.exeはソース公開してないみたいだし、IPHelperAPIにもそのものずばりはなさげだし。でもなにかきっとあるに違いない。違いないんだけど...
_ 続き2
ぐぐってみたところ、
に記載があった。ぐーぐるキャッシュにもないようなので、転載しておこう
netstat -o(xp以降)のようなnetstat + プロセスIDをwin2000で実現しようとしています。 xp以降は散々既出な非公開関数で実現できるのですが、win2000ではググってみたところ NtQuerySystemInformationでハンドル-プロセスID情報を取得。 上記に対しgetsockname / getpeernameが有効であればこれを利用。 無効なら取得ハンドルからDeviceIoControlの制御コード0x210012 + 適当に情報を入れた TDI_CONNECTION_INFORMATIONからTDI_CONNECTION_INFOを取得。 のような流れが主流のようで、これで一応ローカルIP、ポート、プロセスID のデータを取得できています。が、TCPにおけるリモートIP、ポートや connection statusがうまく取得できていません。 TDI_CONNECTION_INFORMATIONを取得するような方法、または他の実現方法、 TDIに関する情報等ありませんでしょうか? DDKのサンプルには目を通していますが、今一バッチリとは来ませんでした。
TDIってなんだろ?