Função RpcSsContextLockShared (rpcasync.h)
A função RpcSsContextLockShared permite que um aplicativo comece a usar um identificador de contexto no modo compartilhado.
Sintaxe
RPC_STATUS RpcSsContextLockShared(
[in] RPC_BINDING_HANDLE ServerBindingHandle,
[in] PVOID UserContext
);
Parâmetros
[in] ServerBindingHandle
Identificador de associação no servidor que representa uma associação a um cliente. O servidor representa o cliente indicado por esse identificador. Se um valor igual a zero for especificado, o servidor representará o cliente que está sendo atendido por esse thread de servidor.
[in] UserContext
Ponteiro passado para a rotina do gerenciador ou servidor por RPC. Confira Comentários para obter mais informações.
Para [out] somente identificadores de contexto, a função RpcSsContextLockShared não executa nenhuma operação.
Retornar valor
Retorna RPC_S_OK após a execução bem-sucedida, indicando que o thread agora tem acesso ao identificador de contexto no modo compartilhado.
Comentários
Modificar se um identificador de contexto é serializado ou não pode ser útil para aplicativos que determinam se um identificador de contexto deve ser fechado com base nas condições detectadas durante a execução. Para alterar um identificador de contexto de não inicializado (compartilhado) para serializado (exclusivo), use a função RpcSsContextLockExclusive .
Para o parâmetro UserContext , se a rotina do gerenciador receber um ponteiro para um identificador de contexto, ele deverá passar a função RpcSsContextLockShared o mesmo ponteiro que recebeu do RPC. Se a rotina do gerenciador receber o próprio identificador de contexto, que é típico para [in] apenas identificadores de contexto, ele deverá passar o próprio identificador de contexto para a função RpcSsContextLockShared . O exemplo de código a seguir demonstra isso:
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 uma rotina de gerente usa vários identificadores de contexto [entrada, saída] como um argumento, o RPC fornece à rotina do gerente um ponteiro para o identificador de contexto, não o próprio identificador de contexto. O ponteiro tem a garantia de ser exclusivo e, portanto, passá-lo para a função RpcSsContextLockShared é inequívoco. No entanto, se uma função usa vários [in] apenas identificadores de contexto, o RPC fornece à rotina do gerenciador o próprio identificador de contexto. Portanto, o identificador de contexto pode não ser exclusivo. Nesse caso, o RPC executa essa função no primeiro identificador de contexto com o valor fornecido.
Os métodos não devem modificar um identificador de contexto quando estiverem no modo compartilhado. Chamar a função RpcSsContextLockShared não elimina um bloqueio de gravador no identificador de contexto especificado; isso garante que o identificador de contexto não será alterado por outro thread.
Chamadas assíncronas não devem usar a função RpcSsContextLockShared no mesmo objeto de chamada de mais de um thread por vez.
A função RpcSsContextLockShared pode falhar devido a condições de memória insuficiente e, portanto, os servidores RPC devem estar preparados para lidar com esses erros.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | rpcasync.h (inclua Rpc.h) |
Biblioteca | Rpcrt4.lib |
DLL | Rpcrt4.dll |