estructura RPC_INTERFACE_TEMPLATEW (rpcdce.h)
La estructura RPC_INTERFACE_TEMPLATE define una interfaz de servidor del grupo de interfaz RPC.
Sintaxis
typedef struct {
unsigned long Version;
RPC_IF_HANDLE IfSpec;
UUID *MgrTypeUuid;
RPC_MGR_EPV *MgrEpv;
unsigned int Flags;
unsigned int MaxCalls;
unsigned int MaxRpcSize;
RPC_IF_CALLBACK_FN *IfCallback;
UUID_VECTOR *UuidVector;
RPC_WSTR Annotation;
void *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATEW, *PRPC_INTERFACE_TEMPLATEW;
Miembros
Version
Este campo está reservado y debe establecerse en 0.
IfSpec
Estructura generada por MIDL que define la interfaz que se va a registrar.
MgrTypeUuid
Puntero a un UUID de
MgrEpv
Puntero a una estructura de RPC_MGR_EPV que contiene el vector de punto de entrada (EPV) de las rutinas de administrador. Si NULL, se usa el EPV predeterminado generado por MIDL.
Flags
Banderas. Para obtener una lista de valores de marca, consulte Marcas de registro de interfaz. Las interfaces de grupo de interfaz siempre se tratan como escucha automática.
MaxCalls
Número máximo de solicitudes simultáneas de llamadas a procedimiento remoto que el servidor puede aceptar en esta interfaz. La biblioteca en tiempo de ejecución de RPC hace su mejor esfuerzo para asegurarse de que el servidor no permite más solicitudes de llamada simultáneas que el número de llamadas especificadas en MaxCalls. Sin embargo, el número real puede ser mayor que MaxCalls y puede variar para cada secuencia de protocolo.
Las llamadas en otras interfaces se rigen por el valor del parámetro MaxCalls de
Si el número de llamadas simultáneas no es un problema, se puede lograr un rendimiento ligeramente mejor del lado servidor especificando el valor predeterminado mediante RPC_C_LISTEN_MAX_CALLS_DEFAULT. Al hacerlo, se evita que el entorno en tiempo de ejecución de RPC aplique una restricción innecesaria.
MaxRpcSize
Tamaño máximo, en bytes, de bloques de datos entrantes. maxRpcSize puede usarse para ayudar a evitar ataques malintencionados por denegación de servicio. Si el bloque de datos de una llamada a procedimiento remoto es mayor que MaxRpcSize, la biblioteca en tiempo de ejecución rpc rechaza la llamada y envía un error de RPC_S_ACCESS_DENIED al cliente. Al especificar un valor de (unsigned int) –1 en MaxRpcSize se quita el límite del tamaño de los bloques de datos entrantes. Este parámetro no tiene ningún efecto en las llamadas realizadas a través del protocolo ncalrpc .
IfCallback
Puntero a una función de devolución de llamada de seguridad RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN o NULL sin devolución de llamada. Cada interfaz registrada puede tener una función de devolución de llamada diferente.
UuidVector
Puntero a un vector de objeto UUID que ofrece el servidor que se va a registrar con el asignador de puntos de conexión RPC. La aplicación de servidor construye este vector. NULL indica que no hay ningún objeto UUID registrar.
Annotation
Puntero al comentario de cadena de caracteres aplicado a cada elemento entre productos agregado a la base de datos de mapa de puntos de conexión local. La cadena puede tener hasta 64 caracteres, incluido el carácter de terminación NULL. Especifique un valor NULL o una cadena terminada en NULL ("\0") si no hay ninguna cadena de anotación.
Las aplicaciones usan la cadena de anotación solo para obtener información. RPC no usa esta cadena para determinar con qué instancia de servidor se comunica un cliente o para enumerar elementos en la base de datos de mapa de puntos de conexión.
SecurityDescriptor
Descriptor de seguridad opcional que describe qué clientes tienen derecho a acceder a la interfaz.
Observaciones
Para registrar una interfaz, el servidor proporciona la siguiente información:
- Especificación de interfaz La especificación de interfaz es una estructura de datos que genera el compilador MIDL.
- Tipo de administrador UUID y administrador EPV El tipo de administrador UUID y el administrador EPV determinan qué rutina de administrador se ejecuta cuando un servidor recibe una solicitud de llamada de procedimiento remoto de un cliente. Para cada implementación de una interfaz ofrecida por un servidor, debe registrar un EPV de administrador independiente. Tenga en cuenta que al especificar un tipo de administrador no nulo UUID, el servidor también debe llamar a RpcObjectSetType para registrar objetos de este tipo no nulo.
Todas las interfaces de grupo de interfaz se tratan como escucha automática. El tiempo de ejecución comienza a escuchar las llamadas en cuanto se activa el grupo de interfaz. Las llamadas a RpcServerListen y RpcMgmtStopServerListening no afectan a la interfaz ni a una llamada a RpcServerUnregisterIf con IfSpec establecido en NULL.
Especificar una función de devolución de llamada de seguridad en IfCallback permite que la aplicación de servidor restrinja el acceso a sus interfaces de forma individual. Es decir, de forma predeterminada, la seguridad es opcional; el tiempo de ejecución del servidor enviará llamadas no seguros aunque el servidor haya llamado a RpcServerRegisterAuthInfo. Si el servidor solo quiere aceptar clientes autenticados, una función de devolución de llamada de interfaz debe llamar a RpcBindingInqAuthClient, RpcGetAuthorizationContextForClient, o RpcServerInqCallAttributes para recuperar el nivel de seguridad, o intentar suplantar al cliente con RpcImpersonateClient. También puede especificar la marca RPC_IF_ALLOW_SECURE_ONLY en Marcas para rechazar llamadas no autenticadas.
Cuando una aplicación de servidor especifica una función de devolución de llamada de seguridad para sus interfaces en IfCallback, el tiempo de ejecución de RPC rechaza automáticamente las llamadas sin información de autenticación a esa interfaz. Además, el tiempo de ejecución registra las interfaces que cada cliente ha usado. Cuando un cliente realiza una RPC en una interfaz que no ha usado durante la sesión de comunicación actual, la biblioteca rpc en tiempo de ejecución llama a la función de devolución de llamada de seguridad de la interfaz. Especificar RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH en marcas impedirá el rechazo automático de clientes no autenticados. Tenga en cuenta que las llamadas a la sesión de seguridad NULL pueden tener información de autenticación, aunque procedan de clientes anónimos. Por lo tanto, la existencia de una devolución de llamada por sí sola no es suficiente para evitar que los clientes anónimos se conecten; La función de devolución de llamada de seguridad debe comprobarlo o se debe usar la marca RPC_IF_ALLOW_SECURE_ONLY. RPC_IF_ALLOW_SECURE_ONLY rechaza llamadas de sesión nulas solo en Windows XP y versiones posteriores de Windows.
Para obtener la firma de la función de devolución de llamada, consulte RPC_IF_CALLBACK_FN.
La función de devolución de llamada de IfCallback debe devolver RPC_S_OK si el cliente puede llamar a métodos en esta interfaz. Cualquier otro código de retorno hará que el cliente reciba la excepción RPC_S_ACCESS_DENIED.
En algunos casos, el tiempo de ejecución de RPC puede llamar a la función de devolución de llamada de seguridad más de una vez por cliente, por interfaz. La función de devolución de llamada debe ser capaz de controlar esta posibilidad.
Nota
El encabezado rpcdce.h define RPC_INTERFACE_TEMPLATE como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 8 [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows Server 2012 [solo aplicaciones de escritorio] |
encabezado de |
rpcdce.h (include Rpc.h) |
Consulte también
RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN