Handles de liaison implicite

Les handles de liaison implicite permettent à votre application de sélectionner un serveur spécifique pour exécuter ses appels de procédure distante. Pour plus d’informations, consultez Liaison côté client. Ils permettent également à votre programme client/serveur d’utiliser des liaisons authentifiées. Autrement dit, le client peut spécifier les informations d’authentification dans un handle de liaison implicite. La bibliothèque d’exécution RPC utilise les informations d’authentification pour établir une session RPC authentifiée entre le client et le serveur. Pour plus d’informations, consultez Sécurité.

Notes

Les handles de liaison implicite ne sont pas thread safe. Les applications multithread doivent donc éviter d’utiliser des handles de liaison implicites.

 

Lorsque votre application utilise des liaisons implicites, le client doit définir les informations de liaison afin de pouvoir créer la liaison. Une fois que le client a créé une liaison implicite, il n’a pas besoin de passer de handles de liaison aux procédures distantes. La bibliothèque RPC gère le reste des mécanismes de la session de communication.

Le client stocke les informations de liaison d’un handle implicite dans une variable globale. Lorsque le compilateur MIDL génère le stub client et le fichier d’en-tête à partir de la spécification d’interface dans votre fichier MIDL, il génère également du code pour une variable de handle de liaison globale. Votre programme client initialise le handle et ne s’y réfère plus tant qu’il n’a pas détruit la liaison.

Vous créez un handle implicite en spécifiant l’attribut [implicit_handle] dans ACF pour une interface comme suit :

/* ACF file (complete) */
 
[
  implicit_handle(handle_t hHello)
]
interface hello
{
}

Le type handle_t , utilisé dans l’exemple précédent, est un type de données MIDL utilisé pour définir des handles de liaison.

Après avoir créé le handle implicite, l’application doit l’utiliser comme paramètre pour les fonctions de bibliothèque d’exécution RPC. N’utilisez pas le handle implicite comme paramètre pour les appels de procédure distante. L’exemple de code suivant illustre l’utilisation de handles de liaison implicites.

RPC_STATUS status;
status = RpcBindingFromStringBinding(
            pszStringBinding,
            &hHello);
 
status = MyRemoteProcedure();
 
status = RpcBindingFree(hHello);
...

Dans l’exemple précédent, les fonctions rpcBindingFromStringBinding et RpcBindingFree de la bibliothèque d’exécution RPC exigeaient que le handle de liaison implicite soit transmis dans leurs listes de paramètres. Toutefois, la procédure distante MyRemoteProcedure ne l’a pas fait, car il ne s’agit pas d’une fonction de bibliothèque d’exécution RPC.