Compartilhar via


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<>]

Onde handle_type<1> pode ser um dos valores mostrados na tabela a seguir.

Enfeitiçar Manejar
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> não for zero, o procedimento usará um identificador implícito do tipo indicado. Consulte o tópico Handles 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.

Identificadores explícitos podem ser primitivos, genéricos e contexto; o último tem o token FC a seguir.

Enfeitiçar Manejar
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.

Enfeitiçar Bandeira 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 não zero.
10 Oi_* Sobrecarregado.
20 Oi_* Sobrecarregado.
40 Oi_USE_NEW_INIT_ROUTINES Usa rotinas de inicialização do Windows NT3.5 Beta2+.
80 Utilizadas.

 

Os sinalizadores a seguir estão sobrecarregados.

Enfeitiçar Bandeira 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 usado mais (antigo OLE).
20 Oi_HAS_COMM_OR_FAULT Somente em RPC bruto, [comm _, fault_status].
20 Oi_OBJ_USE_V2_INTERPRETER Somente no DCOM, use –Oif interpretador.

 

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.

Nota

Para obter 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.