Share via


Función RpcSsContextLockShared (rpcasync.h)

La función RpcSsContextLockShared permite a una aplicación empezar a usar un identificador de contexto en modo compartido.

Sintaxis

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

Parámetros

[in] ServerBindingHandle

Manipulador de enlace en el servidor que representa un enlace a un cliente. El servidor suplanta al cliente indicado por este identificador. Si se especifica un valor de cero, el servidor suplanta al cliente que sirve este subproceso de servidor.

[in] UserContext

Puntero pasado a la rutina de administrador o servidor por RPC. Vea Comentarios para obtener más información.

Para [out] solo los identificadores de contexto, la función RpcSsContextLockShared no realiza ninguna operación.

Valor devuelto

Devuelve RPC_S_OK tras la ejecución correcta, lo que indica que el subproceso ahora tiene acceso al identificador de contexto en modo compartido.

Nota Para obtener una lista de códigos de error válidos, vea Rpc Return Values.
 

Comentarios

Modificar si un identificador de contexto se serializa o no puede ser útil para las aplicaciones que determinan si se debe cerrar un identificador de contexto en función de las condiciones detectadas durante la ejecución. Para cambiar un identificador de contexto de noserializado (compartido) a serializado (exclusivo), use la función RpcSsContextLockExclusive .

Para el parámetro UserContext , si la rutina del administrador recibe un puntero a un identificador de contexto, debe pasar a la función RpcSsContextLockShared el mismo puntero que recibió de RPC. Si la rutina del administrador recibe el propio identificador de contexto, que es típico para los identificadores de contexto [in], debe pasar el propio identificador de contexto a la función RpcSsContextLockShared . En el ejemplo de código siguiente se muestra lo siguiente:

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 una rutina de administrador toma varios identificadores de contexto [in, out] como argumento, RPC proporciona a la rutina del administrador un puntero al identificador de contexto, no al propio identificador de contexto. Se garantiza que el puntero es único y, por lo tanto, pasarlo a la función RpcSsContextLockShared es inequívoca. Sin embargo, si una función toma varios identificadores de contexto [in] solo, RPC proporciona a la rutina del administrador el propio identificador de contexto. Por lo tanto, es posible que el identificador de contexto no sea único. En este caso, RPC ejecuta esta función en el primer identificador de contexto con el valor especificado.

Los métodos no deben modificar un identificador de contexto cuando se encuentra en modo compartido. Llamar a la función RpcSsContextLockShared no elimina un bloqueo de escritor en el identificador de contexto especificado; Esto garantiza que otro subproceso no cambiará el identificador de contexto.

Las llamadas asincrónicas no deben usar la función RpcSsContextLockShared en el mismo objeto de llamada desde más de un subproceso a la vez.

La función RpcSsContextLockShared puede producir un error debido a condiciones de memoria insuficiente y, por tanto, los servidores RPC deben estar preparados para controlar estos errores.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado rpcasync.h (include Rpc.h)
Library Rpcrt4.lib
Archivo DLL Rpcrt4.dll

Consulte también

RpcSsContextLockExclusive

context_handle

context_handle_noserialize

context_handle_serialize