Descritor de cabeçalho de procedimento
O cabeçalho foi estendido várias vezes ao longo da vida útil do mecanismo NDR. O compilador atual ainda gera cabeçalhos diferentes dependendo do modo do compilador. No entanto, cabeçalhos mais recentes são um superconjunto dos mais antigos.
O cabeçalho –Oi antigo
O cabeçalho tem o seguinte formato:
handle_type<1>
Oi_flags<1>
[rpc_flags<4>]
proc_num<2>
stack_size<2>
[explicit_handle_description<>]
Em que handle_type<1> pode ser um dos valores mostrados na tabela a seguir.
Hex | Handle |
---|---|
31 | FC_BIND_GENERIC |
32 | FC_BIND_PRIMITIVE |
33 | FC_AUTO_HANDLE |
34 | FC_CALLBACK_HANDLE |
0 | (identificador explícito) |
Se o campo handle_type<1> for diferente de zero, o procedimento usará um identificador implícito do tipo indicado. Consulte o tópico Identificadores para obter mais informações. Se o campo handle_type<1> for zero, o identificador usado para associação será um dos parâmetros do procedimento.
Os identificadores explícitos podem ser primitivos, genéricos e de contexto; o último tem o token FC a seguir.
Hex | Handle |
---|---|
30 | FC_BIND_CONTEXT |
Por convenção, o tipo de identificador para interfaces DCOM é FC_AUTO_HANDLE.
O campo Oi_flags<1> é uma máscara de 8 bits dos sinalizadores a seguir.
Hex | Sinalizador | Significado |
---|---|---|
01 | Oi_FULL_PTR_USED | Usa o pacote de ponteiro completo. |
02 | Oi_RPCSS_ALLOC_USED | Usa o pacote de memória RpcSs. |
04 | Oi_OBJECT_PROC | Um procedimento em uma interface de objeto. |
08 | Oi_HAS_RPCFLAGS | O procedimento tem sinalizadores Rpc diferentes de zero. |
10 | Oi_* | Sobrecarregado. |
20 | Oi_* | Sobrecarregado. |
40 | Oi_USE_NEW_INIT_ROUTINES | Usa rotinas de inicialização do Windows NT3.5 Beta2+. |
80 | Não utilizado. |
Os sinalizadores a seguir estão sobrecarregados.
Hex | Sinalizador | Significado |
---|---|---|
10 | ENCODE_IS_USED | Usado somente em pickling. |
20 | DECODE_IS_USED | Usado somente em pickling. |
10 | Oi_IGNORE_OBJECT_EXCEPTION_HANDLING | Não é mais usado (OLE antigo). |
20 | Oi_HAS_COMM_OR_FAULT | Somente no RPC bruto, [comm _, fault_status]. |
20 | Oi_OBJ_USE_V2_INTERPRETER | Somente no DCOM, use o interpretador –Oif . |
O campo rpc_flags<4> descreve como definir o campo RpcFlags da estrutura RPC_MESSAGE . Esse campo só estará presente se o campo Oi_flags<1> tiver Oi_HAD_RPCFLAGS definido. Se esse campo não estiver presente, os sinalizadores RPC para o procedimento remoto serão zero.
Observação
Para desempenho, os interpretadores assíncronos sempre têm o campo rpc_flags<4> presente.
O campo proc_num<2> fornece o número do procedimento.
O stack_size<2> fornece o tamanho total de todos os parâmetros na pilha, incluindo qualquer ponteiro e/ou valor retornado.
O campo explicit_handle_description<> é descrito posteriormente neste documento. Esse campo não estará presente se o procedimento usar um identificador implícito.