Top-Level 및 포함된 포인터
Microsoft RPC에서 포인터와 관련 데이터 요소가 할당되는 방식을 이해하려면 최상위 포인터 와 포함된 포인터를 구분해야 합니다. 최상위 포인터가 아닌 모든 포인터 집합을 참조하는 것도 유용합니다.
최상위 포인터는 함수 프로토타입에서 매개 변수의 이름으로 지정된 포인터입니다. 최상위 포인터 및 해당 참조는 항상 서버에 할당됩니다.
포함된 포인터는 배열, 구조체 및 공용 구조체와 같은 데이터 구조에 포함된 포인터입니다. 포함된 포인터가 버퍼에 출력만 쓰고 입력 시 null인 경우 서버 애플리케이션은 해당 값을 null이 아닌 값으로 변경할 수 있습니다. 이 경우 클라이언트 스텁은 이 데이터에 대한 새 메모리를 할당합니다.
호출 전에 포함된 포인터가 클라이언트에서 null이 아닌 경우 스텁은 반환 시 클라이언트에 메모리를 할당하지 않습니다. 대신 스텁은 포함된 포인터와 연결된 메모리를 해당 포인터와 연결된 클라이언트의 기존 메모리에 쓰려고 시도하여 이미 있는 데이터를 덮어씁니다.
참고
버퍼에서 읽거나 버퍼에 쓰는 데이터의 경우 버퍼 크기를 지정하지 않는 경우 출력 길이는 입력 길이보다 작거나 같아야 합니다. 오버플로가 검색되면 RPC 예외가 발생합니다. 문자열 데이터의 경우 출력 길이는 입력 문자열의 길이를 확인하여 결정됩니다. 따라서 출력 문자열은 입력 문자열의 길이를 초과할 수 없습니다. 모범 사례 지침은 항상 버퍼의 크기를 나타내는 크기 지정 매개 변수를 포함하여 이를 방지하는 것입니다.
포함된 쓰기 전용 포인터는 포인터 및 방향 특성 결합에서 설명합니다.
비정상 수준 포인터라는 용어는 포함된 포인터와 여러 수준의 중첩 포인터를 포함하여 함수 프로토타입에서 매개 변수 이름으로 지정되지 않은 모든 포인터를 나타냅니다.