Partilhar via


Descritor de cabeçalho de procedimento

O conector foi estendido várias vezes ao longo da vida útil do motor 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 antigo cabeçalho –Oi

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.

Hex Pega
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 Handles para obter mais informações. Se o campo handle_type<1> for zero, o identificador usado para a vinculação será um dos parâmetros do procedimento.

As alças explícitas podem ser primitivas, genéricas e contextuais; o último tem o seguinte token FC.

Hex Pega
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 seguintes sinalizadores.

Hex 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 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 Bandeira Significado
10 ENCODE_IS_USED Usado apenas em decapagem.
20 DECODE_IS_USED Usado apenas em decapagem.
10 Oi_IGNORE_OBJECT_EXCEPTION_HANDLING Não é mais usado (OLE antigo).
20 Oi_HAS_COMM_OR_FAULT Apenas em RPC bruto, [comm _, fault_status].
20 Oi_OBJ_USE_V2_INTERPRETER Apenas no DCOM, use –Oif intérprete.

 

O campo> rpc_flags<4 descreve como definir o RpcFlags campo da estrutura RPC_MESSAGE. Este campo só está 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 intérpretes assíncronos têm sempre presente o campo rpc_flags<4>.

 

O campo proc_num<2> indica 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 de retorno.

O campo explicit_handle_description<> é descrito mais adiante neste documento. Este campo não estará presente se o procedimento utilizar um identificador implícito.