Información interna de estado RPC
En esta sección se proporcionan detalles de la estructura interna de la información de estado recopilada por el entorno de ejecución de RPC.
Toda la información de estado en tiempo de ejecución de RPC está contenida en celdas. Una celda es la unidad más pequeña de información que se puede ver y actualizar individualmente.
Cada objeto de clave del Run-Time RPC mantendrá una o varias celdas de información sobre su estado. Cada celda tiene un identificador de celda. Cuando un objeto hace referencia a otro objeto, lo hace especificando el identificador de celda del objeto. Los objetos clave sobre los que el Run-Time RPC puede mantener información son los puntos de conexión, los subprocesos, los objetos de conexión, los objetos de llamada de servidor (SCALL) y los objetos de llamada de cliente (CCALL).
Cuando un servidor RPC está en funcionamiento, el entorno en tiempo de ejecución de RPC escucha en una serie de puntos de conexión mediante uno o varios subprocesos de trabajo. Cada vez que los datos se transmiten al servidor, un subproceso recoge los datos y determina cuál es la solicitud entrante. Si la solicitud es crear una conexión, se crea un objeto Connection y, a continuación, este objeto envía todas las llamadas a la conexión. Cuando se realiza una llamada RPC en la conexión, el objeto de conexión instancia un objeto de Llamada al Servidor (SCALL) correspondiente al objeto de Llamada de Cliente (CCALL). A continuación, este objeto Llamada de servidor controla esta llamada en particular.
Cuando un cliente de RPC está en funcionamiento, el entorno en tiempo de ejecución de RPC crea un objeto de llamada de cliente cada vez que se realiza una llamada. Este objeto Llamada de cliente contiene información sobre esta llamada en particular.
Celdas de puntos de conexión
Desde el punto de vista del tiempo de ejecución de RPC, un punto de conexión es un punto de entrada a través del cual se puede ponerse en contacto con el servidor determinado. El punto de conexión siempre está asociado a un transporte RPC determinado. La información de estado del punto de conexión se usa para asociar una llamada de cliente a un proceso determinado en el servidor.
Los campos en una celda de punto final son:
ProtseqType
Secuencia de protocolo para este punto de conexión.
Status
Valor de estado: asignado, activo, o inactivo. La mayoría de los puntos de conexión están activos. Un punto de conexión tiene el estado asignado cuando se ha iniciado el proceso de creación, pero aún no se ha completado. Un punto de conexión está inactivo si ya no está en uso (por ejemplo, cuando se ha desinstalado un protocolo).
EndpointName
Los primeros 28 caracteres del nombre del punto de conexión.
Celdas de hilo
Los subprocesos de servidor son subprocesos de trabajo (subprocesos Win32 estándar para ser utilizados por RPC).
Los campos de una celda de subproceso son:
Status
Valor de estado: procesando, enviado, asignado o inactivo. Un hilo de procesamiento es aquel que está dentro del Run-Time y procesa información. Un subproceso enviado ya se ha enviado (llamado) a la rutina del administrador habilitado por el servidor (que normalmente se denomina rutina de servidor). Un subproceso asignado se ha almacenado en caché. Hay disponible un subproceso inactivo para atender las solicitudes.
LastUpdateTime
Hora (en milisegundos después del arranque) cuando la información se actualizó por última vez.
TID
ID de subproceso de este subproceso. Esto resulta útil al intentar correlacionar con la lista de hilos del depurador.
Celdas de objeto de conexión
Los campos de una celda de objeto de conexión son:
Flags
Entre los valores "flag", se incluyen exclusivo/no exclusivo, nivel de autenticación y servicio de autenticación.
LastTransmitFragmentSize
Tamaño del último fragmento transmitido a través de la conexión.
Endpoint
El identificador de celda del punto final desde el que se ha obtenido esta conexión.
LastSendTime
La última vez que se enviaron datos en una conexión.
LastReceiveTime
La última vez que se recibieron datos en una conexión.
Celdas del objeto de llamada del servidor
Los campos en una celda de objeto de llamada al servidor (SCALL) son:
Status
Valor de estado: asignado, activo o enviado. Una llamada asignada está inactiva y almacenada en caché. Cuando hay una llamada activa el entorno en tiempo de ejecución de RPC procesa la información relacionada con esta llamada. Cuando una llamada es despachada , se ha llamado a la rutina del administrador (rutina del servidor) y aún no ha regresado.
ProcNum
Número de procedimiento (número de operación, en archivos de captura de netmon) de esta llamada. El Run-Time RPC identifica rutinas individuales de una interfaz numerandolas por posición en el archivo IDL. La primera rutina de la interfaz será el número cero, el segundo número uno, etc.
InterfaceUUIDStart
El primeo DWORD del UUID de la interfaz.
ServicingTID
ID de celda del subproceso que está atendiendo esta llamada. Si la llamada no está activa o enviada, aquí hay información obsoleta.
CallFlags
Estos valores de marca indican si se trata de la llamada almacenada en caché en una conexión exclusiva, si se trata de una llamada asincrónica, si se trata de una llamada de canalización y si se trata de una llamada LRPC o OSF.
LastUpdateTime
Hora (en milisegundos después del arranque) cuando la información de estado del objeto de llamada se actualizó por última vez.
PID
ID de proceso del autor de la llamada. Válido solo para las llamadas LRPC.
TID
ID de subproceso del autor de la llamada. Válido solo para las llamadas LRPC.
Celdas de objetos de llamada de cliente
Un objeto Llamada de cliente (CCALL) se divide en dos celdas, ya que la información sobre una llamada de cliente es demasiado grande para caber en una celda. La primera celda se denomina información de llamadas de clientey la segunda se llama información de destino de llamada. La mayoría de las herramientas mostrarán la información juntos, por lo que no es necesario distinguir entre ellos.
La información sobre las llamadas de cliente no se conserva a menos que recopile toda la información de estado. Hay una excepción a esta regla: la información sobre las llamadas de cliente realizadas dentro de una llamada de servidor se mantiene incluso cuando solo se recopila información de estado del servidor. Esto le permite realizar un seguimiento de las llamadas que abarcan varios saltos.
Los campos de la celda Información de llamadas de cliente son:
ProcNum
Número de procedimiento (número de operación, en archivos de captura de netmon) del método al que se llama. El Run-Time RPC identifica rutinas individuales de una interfaz numerandolas por posición en el archivo IDL. La primera rutina de la interfaz será el número cero, el segundo número uno, etc.
ServicingThread
ID de celda del subproceso en el que se realiza esta llamada.
IfStart
El primer DWORD del UUID de la interfaz en la que se realiza la llamada.
Endpoint
Los primeros 12 caracteres del punto de conexión en el servidor al que se realizó la llamada.
Los campos de la celda Información de destino de llamada son:
ProtocolSequence
Secuencia de protocolo para esta llamada.
ÚltimaHoraDeActualización
Hora (en milisegundos después del arranque) cuando se actualizó la información sobre la llamada de cliente o el destino de la llamada.
ServidorObjetivo
Los primeros 24 caracteres del nombre del servidor al que se realiza la llamada.