Condividi tramite


Funzione RpcSsContextLockShared (rpcasync.h)

La funzione RpcSsContextLockShared consente a un'applicazione di iniziare a usare un handle di contesto in modalità condivisa.

Sintassi

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

Parametri

[in] ServerBindingHandle

Handle di associazione nel server che rappresenta un'associazione a un client. Il server rappresenta il client indicato da questo handle. Se viene specificato un valore pari a zero, il server rappresenta il client gestito da questo thread del server.

[in] UserContext

Puntatore passato alla routine di gestione o server tramite RPC. Per ulteriori informazioni, vedere la sezione Osservazioni.

Solo per gli handle di contesto [out] la funzione RpcSsContextLockShared non esegue alcuna operazione.

Valore restituito

Restituisce RPC_S_OK al termine dell'esecuzione, a indicare che il thread ha ora accesso all'handle di contesto in modalità condivisa.

Nota Per un elenco di codici di errore validi, vedere Valori restituiti RPC.
 

Commenti

Modificare se un handle di contesto viene serializzato o non serializzato può essere utile per le applicazioni che determinano se chiudere un handle di contesto in base alle condizioni rilevate durante l'esecuzione. Per modificare un handle di contesto da non serializzato (condiviso) a serializzato (esclusivo), usare la funzione RpcSsContextLockExclusive .

Per il parametro UserContext , se la routine manager riceve un puntatore a un handle di contesto, deve passare la funzione RpcSsContextLockShared lo stesso puntatore ricevuto da RPC. Se la routine di gestione riceve l'handle di contesto stesso, che è tipico solo per gli handle di contesto [in], deve passare l'handle di contesto stesso alla funzione RpcSsContextLockShared . Nell'esempio di codice seguente viene illustrato quanto segue:

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
        );
    ...
}

Se una routine di gestione accetta più handle di contesto [in, out] come argomento, RPC assegna al gestore un puntatore all'handle di contesto, non all'handle di contesto stesso. Il puntatore è garantito che sia univoco e quindi passarlo alla funzione RpcSsContextLockShared non è ambiguo. Tuttavia, se una funzione accetta più handle di contesto [in], RPC fornisce alla routine di gestione l'handle di contesto stesso. Pertanto, l'handle di contesto potrebbe non essere univoco. In questo caso, RPC esegue questa funzione nel primo handle di contesto con il valore specificato.

I metodi non devono modificare un handle di contesto quando è in modalità condivisa. La chiamata alla funzione RpcSsContextLockShared non elimina un blocco writer sull'handle di contesto specificato; in questo modo, l'handle di contesto non verrà modificato da un altro thread.

Le chiamate asincrone non devono usare la funzione RpcSsContextLockShared sullo stesso oggetto di chiamata da più thread alla volta.

La funzione RpcSsContextLockShared può non riuscire a causa di condizioni di memoria insufficiente e i server RPC devono quindi essere preparati a gestire tali errori.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione rpcasync.h (include Rpc.h)
Libreria Rpcrt4.lib
DLL Rpcrt4.dll

Vedi anche

RpcSsContextLockExclusive

context_handle

context_handle_noserialize

context_handle_serialize