프로시저 헤더 설명자
헤더는 NDR 엔진의 수명 동안 여러 번 확장되었습니다. 현재 컴파일러는 컴파일러의 모드에 따라 다른 헤더를 생성합니다. 그러나 최신 헤더는 이전 헤더의 상위 집합입니다.
이전 –Oi 헤더
헤더의 형식은 다음과 같습니다.
handle_type<1>
Oi_flags<1>
[rpc_flags<4>]
proc_num<2>
stack_size<2>
[explicit_handle_description<>]
여기서 handle_type<1> 은 다음 표에 표시된 값 중 하나일 수 있습니다.
Hex | Handle |
---|---|
31 | FC_BIND_GENERIC |
32 | FC_BIND_PRIMITIVE |
33 | FC_AUTO_HANDLE |
34 | FC_CALLBACK_HANDLE |
0 | (명시적 핸들) |
handle_type<1> 필드가 0이 아닌 경우 프로시저는 표시된 종류의 암시적 핸들을 사용합니다. 자세한 내용은 핸들 항목을 참조하세요. handle_type<1> 필드가 0이면 바인딩에 사용되는 핸들이 프로시저의 매개 변수 중 하나입니다.
명시적 핸들은 기본형, 제네릭 및 컨텍스트일 수 있습니다. 마지막 토큰에는 다음 FC 토큰이 있습니다.
Hex | Handle |
---|---|
30 | FC_BIND_CONTEXT |
규칙에 따라 DCOM 인터페이스의 핸들 형식은 FC_AUTO_HANDLE.
Oi_flags<1> 필드는 다음 플래그의 8비트 마스크입니다.
Hex | 플래그 | 의미 |
---|---|---|
01 | Oi_FULL_PTR_USED | 전체 포인터 패키지를 사용합니다. |
02 | Oi_RPCSS_ALLOC_USED | RpcSs 메모리 패키지를 사용합니다. |
04 | Oi_OBJECT_PROC | 개체 인터페이스의 프로시저입니다. |
08 | Oi_HAS_RPCFLAGS | 프로시저에 0이 아닌 Rpc 플래그가 있습니다. |
10 | Oi_* | 오버로드됨. |
20 | Oi_* | 오버로드됨. |
40 | Oi_USE_NEW_INIT_ROUTINES | Windows NT3.5 Beta2+ init 루틴을 사용합니다. |
80 | 사용되지 않습니다. |
다음 플래그가 오버로드됩니다.
Hex | 플래그 | 의미 |
---|---|---|
10 | ENCODE_IS_USED | 피클링에만 사용됩니다. |
20 | DECODE_IS_USED | 피클링에만 사용됩니다. |
10 | Oi_IGNORE_OBJECT_EXCEPTION_HANDLING | 더 이상 사용되지 않음(이전 OLE). |
20 | Oi_HAS_COMM_OR_FAULT | 원시 RPC에서만 [comm _, fault_status]입니다. |
20 | Oi_OBJ_USE_V2_INTERPRETER | DCOM에서만 –Oif 인터프리터를 사용합니다. |
rpc_flags<4> 필드는 RPC_MESSAGE 구조체의 RpcFlags 필드를 설정하는 방법을 설명합니다. 이 필드는 Oi_flags 1> 필드가 Oi_HAD_RPCFLAGS<설정된 경우에만 존재합니다. 이 필드가 없으면 원격 프로시저에 대한 RPC 플래그가 0입니다.
참고
성능을 위해 비동기 인터프리터에는 항상 rpc_flags<4> 필드가 있습니다.
proc_num<2> 필드는 프로시저의 프로시저 번호를 제공합니다.
stack_size<2> 는 이 포인터 및/또는 반환 값을 포함하여 스택에 있는 모든 매개 변수의 총 크기를 제공합니다.
explicit_handle_description<> 필드는 이 문서의 뒷부분에 설명되어 있습니다. 프로시저에서 암시적 핸들을 사용하는 경우에는 이 필드가 없습니다.