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