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