RPC 状態情報の内部構造
このセクションでは、RPC ランタイムによって収集される状態情報の内部構造の詳細を説明します。
すべての RPC 実行時状態情報はセルに含まれます。 セルは、個別に表示および更新できる情報の最小単位です。
RPC ランタイム内の各キー オブジェクトは、その状態に関する情報の 1 つ以上のセルを保持します。 各セルにはセル ID があります。 オブジェクトが別のオブジェクトを参照する場合、そのオブジェクトのセル ID を指定することによって参照します。 RPC ランタイムが情報を維持できる主なオブジェクトは、エンドポイント、スレッド、接続オブジェクト、サーバー呼び出し (SCALL) オブジェクト、およびクライアント呼び出し (CCALL) オブジェクトです。
RPC サーバーの実行中、RPC ランタイムは 1 つ以上のワーカー スレッドを使用して一連のエンドポイントをリッスンします。 データがサーバーに送信されるたびに、スレッドがデータを取得し、受信リクエストが何であるかを判断します。 リクエストが接続の作成である場合、Connection オブジェクトが作成され、このオブジェクトが接続上のすべての呼び出しを処理します。 接続上で RPC 呼び出しが行われると、Connection オブジェクトは、クライアント呼び出し (CCALL) オブジェクトに対応するサーバー呼び出し (SCALL) オブジェクトをインスタンス化します。 このサーバー呼び出しオブジェクトは、この特定の呼び出しを処理します。
RPC クライアントの実行中、RPC ランタイムは呼び出しが行われるたびに Client Call オブジェクトを作成します。 このクライアント呼び出しオブジェクトには、この特定の呼び出しに関する情報が含まれています。
エンドポイントセル
RPC ランタイムの観点から見ると、エンドポイントは、特定のサーバーにアクセスするためのエントリ ポイントです。 エンドポイントは常に、特定の RPC トランスポートに関連付けられます。 エンドポイントの状態情報は、クライアント呼び出しをサーバー上の特定のプロセスに関連付けるために使用されます。
エンドポイント セルのフィールドは次のとおりです。
ProtseqType
このエンドポイントのプロトコル シーケンス。
Status
ステータス値: 割り当て済み、アクティブ、または非アクティブ。 ほとんどのエンドポイントはアクティブです。 作成プロセスが開始された時点で、エンドポイントはステータスを割り当てられていますが、まだ完了していません。 エンドポイントが使用されなくなった場合 (たとえば、プロトコルがアンインストールされた場合)、エンドポイントは非アクティブになります。
EndpointName
エンドポイント名の最初の 28 文字。
スレッドセル
サーバー スレッドはワーカー スレッド (RPC で使用される標準の Win32 スレッド) です。
スレッドセルのフィールドは次のとおりです。
Status
ステータス値: 処理中、ディスパッチ済み、割り当て済み、またはアイドル中。 処理スレッドは、ランタイム内にあり、情報を処理しているスレッドです。 ディスパッチされたスレッドは、サーバー提供のマネージャー ルーチン (通常は単にサーバー ルーチンと呼ばれる) にすでにディスパッチ (呼び出され) しています。 割り当てられたスレッドがキャッシュされました。 アイドル状態のスレッドは、リクエストを処理するために使用できます。
LastUpdateTime
情報が最後に更新された時刻 (起動後のミリ秒単位)。
TID
このスレッドのスレッド ID。 これは、デバッガでスレッド リストと関連付けようとする場合に便利です。
接続対象セル
接続オブジェクトのセル内のフィールドは次のとおりです。
フラグ
フラグ値には、排他的/、非排他的、認証レベル、認証サービスが含まれます。
LastTransmitFragmentSize
接続経由で送信された最後のフラグメントのサイズ。
エンドポイント
この接続が取得されたエンドポイントのセル ID。
最終送信時間
接続上でデータが最後に送信された時刻。
最終受信時間
接続上で最後にデータが受信された時刻。
サーバー呼び出しオブジェクトのセル
サーバー コール (SCALL) オブジェクト セルのフィールドは次のとおりです。
Status
ステータス値: 割り当て済み、アクティブ、またはディスパッチ済み。 割り当てられたコールは非アクティブでキャッシュされています。 呼び出しがアクティブなとき、RPC ランタイムはこの呼び出しに関連する情報を処理します。 呼び出しがディスパッチされると、マネージャー ルーチン (サーバー ルーチン) が呼び出され、まだ戻っていません。
ProcNum
この呼び出しのプロシージャ番号 (netmon キャプチャ ファイル内の操作番号)。 RPC ランタイムは、IDL ファイル内の位置に基づいて番号を付けることにより、インターフェイスから個々のルーチンを識別します。 インターフェイスの最初のルーチンは番号 0、2 番目のルーチンは番号 1 になります。
インターフェースUUID開始
インターフェイス UUID の最初の DWORD。
サービスTID
この呼び出しを処理しているスレッドのセル ID。 通話がアクティブでない場合、またはディスパッチされていない場合、これには古い情報が含まれます。
コールフラグ
これらのフラグ値は、これが排他的接続でキャッシュされた呼び出しであるかどうか、これが非同期呼び出しであるかどうか、これがパイプ呼び出しであるかどうか、およびこれが LRPC または OSF 呼び出しであるかどうかを示します。
LastUpdateTime
コール オブジェクトの状態情報が最後に更新された時間 (ブート後のミリ秒単位)。
PID
呼び出し元のプロセス ID。 LRPC 呼び出しの場合にのみ有効です。
TID
呼び出し元のスレッド ID。 LRPC 呼び出しの場合にのみ有効です。
クライアント呼び出しオブジェクトのセル
クライアント呼び出し (CCALL) オブジェクトは 2 つのセルに分割されています。これは、クライアント呼び出しに関する情報が大きすぎて 1 つのセルに収まらないためです。 最初のセルはクライアント通話情報と呼ばれ、2 番目のセルは通話ターゲット情報と呼ばれます。 ほとんどのツールでは情報がまとめて表示されるため、それらを区別する必要はありません。
完全な状態情報を収集しない限り、クライアント呼び出しに関する情報は維持されません。 このルールには例外が 1 つあります。サーバーの状態情報のみが収集されている場合でも、サーバー呼び出し内で行われたクライアント呼び出しに関する情報は維持されます。 これにより、複数のホップにまたがる通話を追跡できます。
[クライアント通話情報] セルのフィールドは次のとおりです。
ProcNum
呼び出されるメソッドのプロシージャ番号 (netmon キャプチャ ファイル内の操作番号)。 RPC ランタイムは、IDL ファイル内の位置に基づいて番号を付けることにより、インターフェイスから個々のルーチンを識別します。 インターフェイスの最初のルーチンは番号 0、2 番目のルーチンは番号 1 になります。
サービススレッド
この呼び出しが行われるスレッドのセル ID。
IfStart
呼び出しが行われるインターフェイス UUID の最初の DWORD。
エンドポイント
呼び出しが行われたサーバー上のエンドポイントの最初の 12 文字。
[コール ターゲット情報] セルのフィールドは次のとおりです。
プロトコルシーケンス
この呼び出しのプロトコル シーケンス。
LastUpdateTime
クライアント呼び出しまたは呼び出しターゲットに関する情報が更新された時間 (ブート後のミリ秒単位)。
TargetServer
呼び出し先のサーバー名の最初の 24 文字。