Partager via


structure RPC_INTERFACE_TEMPLATE (rpcdce.h)

La structure RPC_INTERFACE_TEMPLATE définit une interface 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_TEMPLATE, *PRPC_INTERFACE_TEMPLATE;

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 nul inscrit IfSpec avec un UUID nul.

MgrEpv

Pointeur vers une structure RPC_MGR_EPV qui contient le vecteur de point d’entrée (EPV) des routines du 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 étant à l’é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 fait tout son possible pour 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, des performances côté serveur légèrement meilleures peuvent être obtenues 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 de (int non signé) –1 dans MaxRpcSize supprime la limite de la taille des blocs de données entrants. Ce paramètre n’a aucun effet sur les appels effectués sur 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 inter-produit ajouté à la base de données de carte de point de terminaison locale. 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’informations 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 quels clients ont le droit d’accéder à l’interface.

Remarques

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

  • Spécification d’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 gestionnaire EPV 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 lors de la spécification d’un UUID de type gestionnaire non nil, le serveur doit également appeler RpcObjectSetType pour inscrire des objets de ce type non nul.

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’interface est activé. Les appels à RpcServerListen et RpcMgmtStopServerListening n’affectent pas l’interface, ni 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 envoie des 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’heure d’exécution RPC rejette automatiquement les appels sans informations d’authentification pour 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 actuelle, 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. Ainsi, l’existence d’un rappel ne suffit pas à elle seule pour empêcher les clients anonymes de se connecter ; la fonction de rappel de sécurité doit case activée pour cela, ou 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, le temps d’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é.

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