다음을 통해 공유


RPC 상태 정보 내부

이 섹션에서는 RPC 런타임에서 수집한 상태 정보의 내부 구조에 대한 세부 정보를 제공합니다.

모든 RPC 런타임 상태 정보는 셀에 포함됩니다. 셀은 개별적으로 보고 업데이트할 수 있는 가장 작은 정보 단위입니다.

RPC Run-Time 각 키 개체는 해당 상태에 대한 하나 이상의 정보 셀을 유지 관리합니다. 각 셀에는 셀 ID가 있습니다. 개체가 다른 개체를 참조하는 경우 해당 개체의 셀 ID를 지정하여 이 작업을 수행합니다. RPC Run-Time 정보를 유지할 수 있는 주요 개체는 엔드포인트, 스레드, 연결 개체, SCALL(서버 호출) 개체 및 CCALL(클라이언트 호출) 개체입니다.

RPC 서버가 실행 중인 경우 RPC Run-Time 하나 이상의 작업자 스레드를 사용하여 엔드포인트 집합에서 수신 대기합니다. 데이터가 서버로 전송될 때마다 스레드는 데이터를 선택하고 들어오는 요청이 무엇인지 결정합니다. 요청이 연결을 만드는 경우 Connection 개체가 만들어지고 이 개체는 연결에 대한 모든 호출을 서비스합니다. 연결에서 RPC 호출이 이루어지면 Connection 개체는 CCALL(클라이언트 호출) 개체에 해당하는 SCALL(서버 호출) 개체를 인스턴스화합니다. 그런 다음 이 Server Call 개체는 이 특정 호출을 처리합니다.

RPC 클라이언트가 실행 중일 때 RPC Run-Time 호출이 이루어질 때마다 Client Call 개체를 만듭니다. 이 Client Call 개체에는 이 특정 호출에 대한 정보가 포함되어 있습니다.

엔드포인트 셀

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자입니다.