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.