Partager via


RpcSsContextLockShared, fonction (rpcasync.h)

La fonction RpcSsContextLockShared permet à une application de commencer à utiliser un handle de contexte en mode partagé.

Syntaxe

RPC_STATUS RpcSsContextLockShared(
  [in] RPC_BINDING_HANDLE ServerBindingHandle,
  [in] PVOID              UserContext
);

Paramètres

[in] ServerBindingHandle

Handle de liaison sur le serveur qui représente une liaison à un client. Le serveur emprunte l’identité du client indiqué par ce handle. Si la valeur zéro est spécifiée, le serveur emprunte l’identité du client pris en charge par ce thread de serveur.

[in] UserContext

Pointeur passé à la routine du gestionnaire ou du serveur par RPC. Pour plus d'informations, consultez la section Notes.

Pour les handles de contexte [out] uniquement, la fonction RpcSsContextLockShared n’effectue aucune opération.

Valeur retournée

Retourne RPC_S_OK en cas d’exécution réussie, indiquant que le thread a maintenant accès au handle de contexte en mode partagé.

Note Pour obtenir la liste des codes d’erreur valides, consultez Valeurs de retour RPC.
 

Remarques

La modification d’un handle de contexte sérialisé ou non peut être utile pour les applications qui déterminent s’il faut fermer un handle de contexte en fonction des conditions détectées lors de l’exécution. Pour passer d’un handle de contexte non sérialisé (partagé) à sérialisé (exclusif), utilisez la fonction RpcSsContextLockExclusive .

Pour le paramètre UserContext , si la routine du gestionnaire reçoit un pointeur vers un handle de contexte, elle doit transmettre à la fonction RpcSsContextLockShared le pointeur qu’elle a reçu de RPC. Si la routine du gestionnaire reçoit le handle de contexte lui-même, ce qui est courant pour les handles de contexte uniquement, elle doit passer le handle de contexte lui-même à la fonction RpcSsContextLockShared . L’exemple de code suivant illustre ceci :

UseExclusive (..., /* [in] */ TestContextHandleExclusive *Ctx, ...)
{
    ...
    // we decided that we're done changing the context handle exclusively
    // and that we have extensive processing ahead - downgrade the exclusive
    // lock to shared, and do the processing allowing other readers in
    RpcSsContextLockShared (NULL,    // use the explicit context
        Ctx
        );
    ...
}

Si une routine de gestionnaire prend plusieurs handles de contexte [in, out] en tant qu’argument, RPC donne à la routine de gestionnaire un pointeur vers le handle de contexte, et non le handle de contexte lui-même. Le pointeur est garanti comme étant unique, sa transmission à la fonction RpcSsContextLockShared est sans ambiguïté. Toutefois, si une fonction accepte plusieurs handles de contexte [in] uniquement, RPC donne à la routine du gestionnaire le handle de contexte lui-même. Par conséquent, le handle de contexte peut ne pas être unique. Dans ce cas, RPC exécute cette fonction sur le premier handle de contexte avec la valeur donnée.

Les méthodes ne doivent pas modifier un handle de contexte en mode partagé. L’appel de la fonction RpcSsContextLockShared n’élimine pas un verrou d’enregistreur sur le handle de contexte spécifié ; Cela garantit que le handle de contexte ne sera pas modifié par un autre thread.

Les appels asynchrones ne doivent pas utiliser la fonction RpcSsContextLockShared sur le même objet d’appel à partir de plusieurs threads à la fois.

La fonction RpcSsContextLockShared peut échouer en raison de conditions de mémoire insuffisante, et les serveurs RPC doivent donc être prêts à gérer ces erreurs.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête rpcasync.h (inclure Rpc.h)
Bibliothèque Rpcrt4.lib
DLL Rpcrt4.dll

Voir aussi

RpcSsContextLockExclusive

context_handle

context_handle_noserialize

context_handle_serialize