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é.
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 |