Поделиться через


Дескриптор заголовка процедуры

Заголовок был продлен несколько раз на протяжении всего срока службы обработчика 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> не равно нулю, то процедура использует неявный дескриптор указанного типа. Дополнительные сведения см. в разделе Дескриптора . Если поле handle_type<1> равно нулю, дескриптор, используемый для привязки, является одним из параметров процедуры.

Явные дескрипторы могут быть примитивными, универсальными и контекстными; последний имеет следующий токен FC.

Hex Handle
30 FC_BIND_CONTEXT

 

По соглашению тип дескриптора для интерфейсов DCOM FC_AUTO_HANDLE.

Поле Oi_flags<1> является 8-разрядной маской следующих флагов.

Hex Flag Значение
01 Oi_FULL_PTR_USED Использует полный пакет указателя.
02 Oi_RPCSS_ALLOC_USED Использует пакет памяти RpcSs.
04 Oi_OBJECT_PROC Процедура в интерфейсе объекта.
08 Oi_HAS_RPCFLAGS Процедура имеет ненулевые флаги Rpc.
10 Эй_* Перегружен.
20 Эй_* Перегружен.
40 Oi_USE_NEW_INIT_ROUTINES Использует процедуры инициализации Windows NT3.5 Beta2+.
80 Не используется.

 

Следующие флаги перегружены.

Hex Flag Значение
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> описывает, как задать поле RpcFlags структуры RPC_MESSAGE . Это поле присутствует только в том случае, если для поля Oi_flags<1> задано Oi_HAD_RPCFLAGS. Если это поле отсутствует, флаги RPC для удаленной процедуры равны нулю.

Примечание

Для повышения производительности асинхронные интерпретаторы всегда имеют поле rpc_flags<4> .

 

Поле proc_num<2> содержит номер процедуры.

Stack_size<2> предоставляет общий размер всех параметров в стеке, включая любой указатель и (или) возвращаемое значение.

Поле explicit_handle_description<> описано далее в этом документе. Это поле отсутствует, если процедура использует неявный дескриптор.