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