사용자 마샬링
사용자 마샬링에는 transmit_as 유사한 형식 문자열이 있습니다.
FC_USER_MARSHAL
flags<1>
quadruple_index<2>
user_type_memory_size<2>
transmitted_type_buffer size<2>
offset_to_the_transmitted_type<2>
플래그<1> 바이트는 위쪽 플래그 니블과 하부 맞춤 니블로 구성됩니다.
플래그 니블의 상위 2비트 는 와이어 형식이 고유한 포인터, 참조 포인터 또는 포인터(ptr일 수 없음)로 정의되는지 여부를 설명하는 데 사용됩니다. 플래그를 설정/가져오기 위해 다음 매니페스트가 정의되었습니다.
#define USER_MARSHAL_UNIQUE 0x80
#define USER_MARSHAL_REF 0x40
#define USER_MARSHAL_POINTER 0xc0 /* unique or ref */
#define USER_MARSHAL_IID 0x20 /* JIT compiler only */
플래그 단어의 맞춤 니블은 전송된 형식의 와이어 맞춤을 유지합니다.
quadruple_index<2> 는 사용자 마샬링 함수의 콜백 루틴 4배 인덱스입니다. 일상적인 위치는 크기 조정, 마샬링, 경계 해제 및 해제 루틴과 같습니다.
user_type_memory_size<2> 는 알 수 없는 형식을 포함하여 사용자별 형식에 대한 크기를 제공합니다.
transmitted_type_buffer_size<2> 는 크기가 다를 때 0이거나 실제 고정 크기입니다. 이는 버퍼의 크기를 조정하고 해제할 때 MIDL이 콜백을 건너뛸 수 있도록 하는 최적화입니다.
범위
[범위] 검사는 NDR 계층에서 인수 유효성 검사를 위한 추가 수단을 제공합니다. [range] 설명자의 형식은 다음과 같습니다.
FC_RANGE, flags_type <1>
low value<4>
high value<4>
플래그는 위쪽 니블을 사용하고 두 번째 바이트의 아래쪽 니블을 입력합니다. 낮은 값과 높은 값은 검사할 변수의 형식에 따라 달라집니다.
플래그는 확장 차량으로 의미가 있습니다. 컴파일러에서 nibble을 0으로 설정했습니다.