Descriptor de encabezado de procedimiento
El encabezado se ha extendido varias veces a lo largo de la vida del motor NDR. El compilador actual sigue generando encabezados diferentes en función del modo del compilador. Sin embargo, los encabezados más recientes son un superconjunto de los más antiguos.
Encabezado –Oi antiguo
El encabezado tiene el siguiente formato:
handle_type<1>
Oi_flags<1>
[rpc_flags<4>]
proc_num<2>
stack_size<2>
[explicit_handle_description<>]
Donde handle_type<1> puede ser uno de los valores que se muestran en la tabla siguiente.
Hex | Handle |
---|---|
31 | FC_BIND_GENERIC |
32 | FC_BIND_PRIMITIVE |
33 | FC_AUTO_HANDLE |
34 | FC_CALLBACK_HANDLE |
0 | (identificador explícito) |
Si el campo handle_type<1> es distinto de cero, el procedimiento usa un identificador implícito del tipo indicado. Consulte el tema Handles (Identificadores ) para obtener más información. Si el campo handle_type<1> es cero, el identificador usado para el enlace es uno de los parámetros del procedimiento.
Los identificadores explícitos pueden ser primitivos, genéricos y de contexto; el último tiene el siguiente token de FC.
Hex | Handle |
---|---|
30 | FC_BIND_CONTEXT |
Por convención, el tipo de identificador de las interfaces DCOM es FC_AUTO_HANDLE.
El campo Oi_flags<1> es una máscara de 8 bits de las marcas siguientes.
Hex | Marca | Significado |
---|---|---|
01 | Oi_FULL_PTR_USED | Usa el paquete de puntero completo. |
02 | Oi_RPCSS_ALLOC_USED | Usa el paquete de memoria RpcSs. |
04 | Oi_OBJECT_PROC | Procedimiento en una interfaz de objeto. |
08 | Oi_HAS_RPCFLAGS | El procedimiento tiene marcas Rpc que no son cero. |
10 | Oi_* | Sobrecargado. |
20 | Oi_* | Sobrecargado. |
40 | Oi_USE_NEW_INIT_ROUTINES | Usa rutinas de inicialización de Windows NT3.5 Beta2+. |
80 | Sin usar. |
Las marcas siguientes están sobrecargadas.
Hex | Marca | Significado |
---|---|---|
10 | ENCODE_IS_USED | Solo se usa en el selector. |
20 | DECODE_IS_USED | Solo se usa en el selector. |
10 | Oi_IGNORE_OBJECT_EXCEPTION_HANDLING | Ya no se usa (OLE antiguo). |
20 | Oi_HAS_COMM_OR_FAULT | Solo en RPC sin formato, [comm _, fault_status]. |
20 | Oi_OBJ_USE_V2_INTERPRETER | Solo en DCOM, use el intérprete –Oif . |
El campo rpc_flags<4> describe cómo establecer el campo RpcFlags de la estructura RPC_MESSAGE . Este campo solo está presente si el campo Oi_flags<1> tiene Oi_HAD_RPCFLAGS establecido. Si este campo no está presente, las marcas RPC para el procedimiento remoto son cero.
Nota
Para el rendimiento, los intérpretes asincrónicos siempre tienen el campo rpc_flags<4> presente.
El campo proc_num<2> proporciona el número de procedimiento del procedimiento.
El stack_size<2> proporciona el tamaño total de todos los parámetros de la pila, incluido cualquier puntero o valor devuelto.
El campo explicit_handle_description<> se describe más adelante en este documento. Este campo no está presente si el procedimiento usa un identificador implícito.