RPC 状态信息的内部结构

本部分提供了 RPC 运行时收集的状态信息的内部结构的详细信息。

所有 RPC 运行时状态信息都包含在单元格中。 单元格是可以单独查看和更新的最小信息单位。

RPC Run-Time中的每个键对象都将保留一个或多个有关其状态的信息单元格。 每个单元格都有一个单元格 ID。 当对象引用另一个对象时,它通过指定该对象的单元格 ID 来执行此操作。 RPC Run-Time可以维护相关信息的关键对象包括终结点、线程、连接对象、服务器调用 (SCALL) 对象和客户端调用 (CCALL) 对象。

RPC 服务器运行时,RPC Run-Time使用一个或多个工作线程侦听一组终结点。 每当将数据传输到服务器时,线程会选取数据并确定传入请求是什么。 如果请求是创建连接,则创建 Connection 对象,然后为连接上的所有调用提供服务。 当对连接进行 RPC 调用时,Connection 对象实例化与客户端调用 (CCALL) 对象对应的服务器调用 (SCALL) 对象。 然后,此服务器调用对象处理此特定调用。

当 RPC 客户端运行时,每次调用时,RPC Run-Time都会创建一个客户端调用对象。 此客户端调用对象包含有关此特定调用的信息。

终结点单元格

从 RPC 运行时的角度来看,终结点是可以联系特定服务器的入口点。 终结点始终与给定的 RPC 传输相关联。 终结点状态信息用于将客户端调用与服务器上的特定进程相关联。

终结点单元格中的字段为:

ProtseqType
此终结点的协议序列。

地位
状态值: 已分配活动非活动。 大多数终结点处于活动状态。 创建过程开始时,终结点已 分配 状态,但尚未完成。 如果终结点不再处于 非活动状态 , (例如,) 卸载协议时。

EndpointName
终结点名称的前 28 个字符。

线程单元格

服务器线程是可供 RPC) 使用的标准 Win32 线程 (工作线程。

线程单元格中的字段为:

地位
状态值: 正在处理已调度已分配空闲处理线程是Run-Time中正在处理信息的线程。 已调度线程已将名为) 的 (调度到服务器提供的管理器例程 (通常只称为服务器例程) 。 已缓存 已分配 的线程。 空闲线程可用于服务请求。

LastUpdateTime
启动后 () 上次更新信息的时间(以毫秒为单位)。

TID
此线程的线程 ID。 尝试与调试器中的线程列表关联时,这很有用。

连接对象单元格

连接对象单元格中的字段为:

标志
标志值包括独占非独占/、身份验证级别身份验证服务

LastTransmitFragmentSize
通过连接传输的最后一个片段的大小。

端点
从中选取此连接的终结点的单元格 ID。

LastSendTime
上次在连接上发送数据的时间。

LastReceiveTime
上次在连接上接收数据的时间。

服务器调用对象单元格

服务器调用 (SCALL) 对象单元格中的字段为:

地位
状态值: 已分配活动已调度分配的调用处于非活动状态并已缓存。 当调用 处于活动状态时,RPC Run-Time正在处理与此调用相关的信息。 调度调用时,管理器例程 (服务器例程) 已调用,尚未返回。

ProcNum
此调用) netmon 捕获文件中的过程编号 (操作号。 RPC Run-Time通过按 IDL 文件中的位置对各个例程进行编号来标识接口中的单个例程。 接口中的第一个例程为数字 0,第二个例程为数字 1,依此依序。

InterfaceUUIDStart
接口 UUID 的第一个 DWORD。

ServicingTID
为此调用提供服务的线程的单元格 ID。 如果调用未 处于活动状态未调度,则包含过时的信息。

CallFlags
这些标志值指示这是否是独占连接中的缓存调用、是否为异步调用、是否为管道调用,以及这是 LRPC 还是 OSF 调用。

LastUpdateTime
启动后 () 上次更新调用对象状态信息的时间(以毫秒为单位)。

Pid
调用方的进程 ID。 仅对 LRPC 调用有效。

TID
调用方线程 ID。 仅对 LRPC 调用有效。

客户端调用对象单元格

客户端呼叫 (CCALL) 对象分为两个单元格,因为有关客户端调用的信息太大,无法容纳在一个单元格中。 第一个单元格称为 “客户端呼叫信息”,第二个单元格称为 “呼叫目标信息”。 大多数工具都会一起显示信息,因此无需区分它们。

除非收集完整状态信息,否则不会维护有关客户端调用的信息。 此规则有一个例外:即使仅收集服务器状态信息,也会保留有关服务器调用中客户端调用的信息。 这允许跟踪跨多个跃点的调用。

“客户端呼叫信息”单元格中的字段为:

ProcNum
netmon 捕获文件中的过程编号 (操作编号,) 所调用的方法。 RPC Run-Time通过按 IDL 文件中的位置对各个例程进行编号来标识接口中的单个例程。 接口中的第一个例程为数字 0,第二个例程为数字 1,依此依序。

ServicingThread
进行此调用的线程的单元格 ID。

IfStart
进行调用的接口 UUID 的第一个 DWORD。

端点
进行调用的服务器上的终结点的前 12 个字符。

“呼叫目标信息”单元格中的字段为:

ProtocolSequence
此调用的协议序列。

LastUpdateTime
启动后的时间 (毫秒,) 更新有关客户端调用或调用目标的信息。

TargetServer
进行调用的服务器名称的前 24 个字符。