Partager via


RPC_INTERFACE_TEMPLATEA structure (rpcdce.h)

La structure RPC_INTERFACE_TEMPLATE définit une interface de serveur de groupe d’interfaces RPC.

Syntaxe

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_CSTR           Annotation;
  void               *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATEA, *PRPC_INTERFACE_TEMPLATEA;

Membres

Version

Ce champ est réservé et doit être défini sur 0.

IfSpec

Structure générée par MIDL qui définit l’interface à inscrire.

MgrTypeUuid

Pointeur vers un UUID à associer à MgrEpv. NULL ou un UUID nil inscrit IfSpec avec un UUID nil.

MgrEpv

Pointeur vers une structure RPC_MGR_EPV qui contient le vecteur de point d’entrée (EPV) des routines de gestionnaire. Si la valeur est NULL, l’EPV par défaut généré par MIDL est utilisé.

Flags

Drapeaux. Pour obtenir la liste des valeurs d’indicateur, consultez Indicateurs d’inscription d’interface. Les interfaces de groupe d’interface sont toujours traitées comme une écoute automatique.

MaxCalls

Nombre maximal de demandes d’appel de procédure distante simultanées que le serveur peut accepter sur cette interface. La bibliothèque d’exécution RPC s’efforce de s’assurer que le serveur n’autorise pas plus de demandes d’appels simultanés que le nombre d’appels spécifié dans MaxCalls. Toutefois, le nombre réel peut être supérieur à MaxCalls et peut varier pour chaque séquence de protocole.

Les appels sur d’autres interfaces sont régis par la valeur du paramètre MaxCalls à l’échelle du processus spécifié dans RpcServerListen.

Si le nombre d’appels simultanés n’est pas un problème, vous pouvez obtenir de légères performances côté serveur en spécifiant la valeur par défaut à l’aide de RPC_C_LISTEN_MAX_CALLS_DEFAULT. Cela évite à l’environnement d’exécution RPC d’appliquer une restriction inutile.

MaxRpcSize

Taille maximale, en octets, des blocs de données entrants. MaxRpcSize peut être utilisé pour empêcher les attaques par déni de service malveillantes. Si le bloc de données d’un appel de procédure distante est supérieur à MaxRpcSize, la bibliothèque d’exécution RPC rejette l’appel et envoie une erreur RPC_S_ACCESS_DENIED au client. La spécification d’une valeur (int non signé) –1 dans MaxRpcSize supprime la limite de taille des blocs de données entrants. Ce paramètre n’a aucun effet sur les appels effectués via le protocole ncalrpc .

IfCallback

Pointeur vers une fonction de rappel de sécurité RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN ou NULL pour aucun rappel. Chaque interface inscrite peut avoir une fonction de rappel différente.

UuidVector

Pointeur vers un vecteur d’UUID d’objet proposé par le serveur à inscrire auprès du mappeur de point de terminaison RPC. L’application serveur construit ce vecteur. NULL indique qu’il n’y a pas d’UUID d’objet à inscrire.

Annotation

Pointeur vers le commentaire de chaîne de caractères appliqué à chaque élément de produit croisé ajouté à la base de données locale endpoint-map. La chaîne peut avoir jusqu’à 64 caractères, y compris le caractère de fin null. Spécifiez une valeur Null ou une chaîne terminée par null (« \0 ») s’il n’existe aucune chaîne d’annotation.

La chaîne d’annotation est utilisée par les applications à des fins d’information uniquement. RPC n’utilise pas cette chaîne pour déterminer quel serveur instance un client communique avec ou pour énumérer des éléments dans la base de données endpoint-map.

SecurityDescriptor

Descripteur de sécurité facultatif décrivant les clients qui ont le droit d’accéder à l’interface.

Remarques

Pour inscrire une interface, le serveur fournit les informations suivantes :

  • Spécification de l’interface La spécification d’interface est une structure de données générée par le compilateur MIDL.
  • Type de gestionnaire UUID et EPV de gestionnaire Le type de gestionnaire UUID et le gestionnaire EPV déterminent quelle routine de gestionnaire s’exécute lorsqu’un serveur reçoit une demande d’appel de procédure distante d’un client. Pour chaque implémentation d’une interface proposée par un serveur, elle doit inscrire un EPV de gestionnaire distinct. Notez que lorsque vous spécifiez un UUID de type gestionnaire non nil, le serveur doit également appeler RpcObjectSetType pour inscrire des objets de ce type non nil.

Toutes les interfaces de groupe d’interface sont traitées en tant qu’écoute automatique. Le runtime commence à écouter les appels dès que le groupe d’interfaces est activé. Les appels à RpcServerListen et RpcMgmtStopServerListening n’affectent pas l’interface, pas plus qu’un appel à RpcServerUnregisterIf avec IfSpec défini sur NULL.

La spécification d’une fonction de rappel de sécurité dans IfCallback permet à l’application serveur de restreindre l’accès à ses interfaces sur une base de client individuel. Autrement dit, par défaut, la sécurité est facultative ; l’exécution du serveur distribue les appels non sécurisés même si le serveur a appelé RpcServerRegisterAuthInfo. Si le serveur souhaite accepter uniquement les clients authentifiés, une fonction de rappel d’interface doit appeler RpcBindingInqAuthClient, RpcGetAuthorizationContextForClient ou RpcServerInqCallAttributes pour récupérer le niveau de sécurité, ou tenter d’emprunter l’identité du client avec RpcImpersonateClient. Il peut également spécifier l’indicateur RPC_IF_ALLOW_SECURE_ONLY dans Indicateurs pour rejeter les appels non authentifiés .

Lorsqu’une application serveur spécifie une fonction de rappel de sécurité pour ses interfaces dans IfCallback, l’exécution rpc rejette automatiquement les appels sans informations d’authentification à cette interface. En outre, l’exécution enregistre les interfaces utilisées par chaque client. Lorsqu’un client effectue un RPC vers une interface qu’il n’a pas utilisée pendant la session de communication active, la bibliothèque d’exécution RPC appelle la fonction de rappel de sécurité de l’interface. La spécification de RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH dans Indicateurs empêche le rejet automatique des clients non authentifiés . Notez que les appels sur la session de sécurité NULL peuvent avoir des informations d’authentification, même s’ils proviennent de clients anonymes. Par conséquent, l’existence d’un rappel seul n’est pas suffisante pour empêcher les clients anonymes de se connecter ; soit la fonction de rappel de sécurité doit case activée pour cela, soit l’indicateur RPC_IF_ALLOW_SECURE_ONLY doit être utilisé. RPC_IF_ALLOW_SECURE_ONLY rejette les appels de session Null uniquement sur Windows XP et les versions ultérieures de Windows.

Pour obtenir la signature de la fonction de rappel, consultez RPC_IF_CALLBACK_FN.

La fonction de rappel dans IfCallback doit retourner RPC_S_OK si le client est autorisé à appeler des méthodes dans cette interface. Tout autre code de retour entraîne la réception par le client de l’exception RPC_S_ACCESS_DENIED.

Dans certains cas, l’exécution rpc peut appeler la fonction de rappel de sécurité plusieurs fois par client, par interface. La fonction de rappel doit être en mesure de gérer cette possibilité.

Notes

L’en-tête rpcdce.h définit RPC_INTERFACE_TEMPLATE en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau uniquement]
En-tête rpcdce.h (inclure Rpc.h)

Voir aussi

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

RpcServerInqBindings

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate