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

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.