다음을 통해 공유


type_UserMarshal 함수

<type>_UserMarshal 함수는 [wire_marshal] 및 [user_marshal] 특성에 대한 도우미 함수입니다. 스텁은 이 함수를 호출하여 클라이언트 또는 서버 쪽의 데이터를 마샬링합니다. 함수는 다음과 같이 정의됩니다.

unsigned char __RPC_FAR * __RPC_USER  <type>_UserMarshal(
    unsigned long __RPC_FAR * pFlags,
    unsigned char __RPC_FAR * pBuffer,
    <type>  __RPC_FAR *       pMyObj);

함수 이름의 형식>은 <[wire_marshal] 또는 [user_marshal] 형식 정의에 지정된 userm-type을 의미합니다. 이 형식은 MIDL 컴파일러에 알 수 없는 형식인 [user_marshal] 특성과 함께 사용될 때 전송할 수 없거나 짝수일 수 있습니다. 와이어 형식 이름(변환 가능한 형식의 이름)은 함수 프로토타입에서 사용되지 않습니다. 그러나 유선 형식은 OSF DCE에서 지정한 데이터에 대한 와이어 레이아웃을 정의합니다.

pFlags 매개 변수는 서명되지 않은 긴 플래그 필드에 대한 포인터입니다. 플래그의 위쪽 단어에는 부동 소수점, 바이트 순서 및 문자 표현에 대해 OSF DCE에서 정의한 NDR 데이터 표현 플래그가 포함됩니다. 아래쪽 단어에는 COM 채널에서 정의한 대로 마샬링 컨텍스트 플래그가 포함됩니다. 필드 내 플래그의 정확한 레이아웃은 type_UserSize 함수에 설명되어 있습니다.

pBuffer 매개 변수는 현재 버퍼 포인터입니다. 이 포인터는 항목에 맞춰지거나 정렬되지 않을 수 있습니다. type<>_UserMarshal 함수는 버퍼 포인터를 적절하게 정렬하고, 데이터를 마샬링하고, 마샬링된 개체 뒤의 첫 번째 바이트 주소인 새 버퍼 위치를 반환해야 합니다. 와이어 형식 사양은 버퍼에 있는 데이터의 실제 레이아웃을 결정합니다.

pMyObj 매개 변수는 사용자 형식 개체에 대한 포인터입니다.

반환 값은 새 버퍼 위치이며, 이는 숨을 들이지 않은 개체 뒤의 첫 번째 바이트의 주소입니다.

버퍼 오버플로는 데이터의 크기를 잘못 계산하고 예상보다 많은 데이터를 마샬링하려고 할 때 발생할 수 있습니다. 이 상황을 피하려면 주의해야 합니다. 형식_UserMarshal 반환되는 포인터를 사용하여 검사 <수 있습니다.> 그렇지 않으면 나중에 NDR 엔진이 버퍼 오버플로 예외를 발생시킬 위험이 있습니다.

예외를 catch하고 로컬로 처리해야 합니다. 예외가 호출 스택을 전파할 수 없어야 합니다.

user_marshal 및 wire_marshal 대한 마샬링 규칙

wire_marshal

user_marshal