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


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

Заголовок был расширен несколько раз за всю жизнь подсистемы NDR. Текущий компилятор по-прежнему создает разные заголовки в зависимости от режима компилятора. Тем не менее, более последние заголовки являются супермножеством старых.

Старый заголовок –Oi

Заголовок имеет следующий формат:

handle_type<1> 
Oi_flags<1>
[rpc_flags<4>]
proc_num<2>  
stack_size<2>
[explicit_handle_description<>]

Где handle_type<1> может быть одним из значений, показанных в следующей таблице.

Зачаровывать Ручка
31 FC_BIND_GENERIC
32 FC_BIND_PRIMITIVE
33 FC_AUTO_HANDLE
34 FC_CALLBACK_HANDLE
0 (явный дескриптор)

 

Если поле handle_type<1> ненулевое, процедура использует неявный дескриптор указанного типа. Дополнительные сведения см. в разделе Handles. Если поле handle_type<1> равно нулю, дескриптор, используемый для привязки, является одним из параметров процедуры.

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

Зачаровывать Ручка
30 FC_BIND_CONTEXT

 

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

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

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

 

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

Зачаровывать Флаг Значение
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<> описано далее в этом документе. Это поле отсутствует, если процедура использует неявный дескриптор.