Compartir a través de


Método ISecurityProperty::GetOriginalCallerSID (comsvcs.h)

Recupera el identificador de seguridad del proceso base que inició la secuencia de llamadas desde la que se llamó al método actual.

La manera preferida de obtener información sobre el autor de la llamada original es usar la interfaz ISecurityCallContext .

Sintaxis

HRESULT GetOriginalCallerSID(
  [out] PSID *pSID
);

Parámetros

[out] pSID

Referencia al identificador de seguridad del proceso base que inició la secuencia de llamadas desde la que se llamó al método actual.

Valor devuelto

Este método puede devolver los valores devueltos estándar E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED y E_FAIL, así como los siguientes valores.

Código devuelto Descripción
S_OK
El identificador de seguridad del proceso base que originó la llamada al objeto actual se devuelve en el parámetro pSid.
CONTEXT_E_NOCONTEXT
El objeto actual no tiene un contexto asociado porque el componente no se importó en una aplicación o el objeto no se creó con uno de los métodos CreateInstance de COM+.

Comentarios

Use el método GetOriginalCallerSID para determinar el identificador de seguridad del proceso original que inició la secuencia de llamadas desde la que se llamó al método actual, no al autor (o creador) del proceso. Aunque un puntero a un objeto se puede pasar a través de una serie de servidores y usuarios, GetOriginalCallerSID siempre devuelve el primer servidor y usuario del proceso, incluso si ese usuario no era el creador original del objeto. En el escenario siguiente se muestra la funcionalidad del método GetOriginalCallerSID .

Diagrama que muestra los resultados del método GetOriginalCallerSID para las referencias de objeto pasadas entre cuatro servidores que ejecutan dos procesos base.

  1. El proceso base 1, que se ejecuta en el servidor A como usuario A, crea el objeto X, en el servidor B, que se ejecuta como usuario B.
  2. El proceso base 1 pasa su referencia en el objeto X al proceso base 2, que se ejecuta en el servidor D como usuario D.
  3. El proceso base 2 usa esa referencia para llamar a Object X.
  4. El objeto X llama a Object Y, que se ejecuta en el servidor C. Si Object Y llama a GetOriginalCallerSID, se devuelve el identificador de seguridad del usuario D, no el usuario A, que creó originalmente el objeto.
Nota Normalmente, el autor de la llamada original de un objeto es el mismo proceso que su creador original. La única situación en la que el autor de la llamada original y el creador original serían diferentes es uno en el que el creador original pasa una referencia a otro proceso y el otro proceso inicia la secuencia de llamadas (como en el ejemplo anterior).
 
La ruta de acceso al autor de la llamada original se interrumpe si algún objeto a lo largo de la cadena se creó por algún medio distinto de IObjectContext::CreateInstance o ITransactionContext::CreateInstance. Por ejemplo, si el proceso base 1 usa CoCreateInstance para crear el objeto X, cuando Object Y llama a GetOriginalCallerSID , el identificador de seguridad que obtiene es el identificador de seguridad del usuario B, no el usuario D. Esto se debe a que la secuencia de llamadas se realiza un seguimiento a través del contexto de los objetos y COM+ solo puede crear un contexto para un objeto creado con IObjectContext::CreateInstance o ITransactionContext::CreateInstance.

Debe llamar a ReleaseSID en un identificador de seguridad cuando termine de usarlo.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado comsvcs.h

Consulte también

ISecurityProperty