Compartilhar via


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

Recupera o identificador de segurança do processo base que iniciou a sequência de chamadas da qual o método atual foi chamado.

A maneira preferida de obter informações sobre o chamador original é usar a interface ISecurityCallContext .

Sintaxe

HRESULT GetOriginalCallerSID(
  [out] PSID *pSID
);

Parâmetros

[out] pSID

Uma referência à ID de segurança do processo base que iniciou a sequência de chamadas da qual o método atual foi chamado.

Retornar valor

Esse método pode retornar os valores de retorno padrão E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED e E_FAIL, bem como os valores a seguir.

Código de retorno Descrição
S_OK
A ID de segurança do processo base que originou a chamada para o objeto atual é retornada no parâmetro pSid.
CONTEXT_E_NOCONTEXT
O objeto atual não tem um contexto associado a ele porque o componente não foi importado para um aplicativo ou o objeto não foi criado com um dos métodos Com+ CreateInstance .

Comentários

Use o método GetOriginalCallerSID para determinar a ID de segurança do processo original que iniciou a sequência de chamadas da qual o método atual foi chamado, não o originador (ou criador) do processo. Embora um ponteiro para um objeto possa ser passado por uma série de servidores e usuários, GetOriginalCallerSID sempre retorna o primeiro servidor e usuário do processo, mesmo que esse usuário não fosse o criador original do objeto. O cenário a seguir ilustra a funcionalidade do método GetOriginalCallerSID .

Diagrama mostrando os resultados do método GetOriginalCallerSID para referências de objeto passadas entre quatro servidores que executam dois processos base.

  1. O Processo Base 1, em execução no Servidor A como usuário A, cria o Objeto X, no Servidor B, em execução como usuário B.
  2. O Processo Base 1 passa sua referência no Objeto X para o Processo Base 2, em execução no Servidor D como usuário D.
  3. O Processo Base 2 usa essa referência para chamar o Objeto X.
  4. O objeto X chama o Objeto Y, em execução no Servidor C. Se o Objeto Y chamar GetOriginalCallerSID, a ID de segurança do usuário D será retornada, não o usuário A, que originalmente criou o objeto.
Nota Normalmente, o chamador original de um objeto é o mesmo processo que seu criador original. A única situação em que o chamador original e o criador original seriam diferentes é uma em que o criador original passa uma referência a outro processo e o outro processo inicia a sequência de chamadas (como no exemplo anterior).
 
O caminho para o chamador original será quebrado se qualquer objeto ao longo da cadeia tiver sido criado por alguns meios diferentes de IObjectContext::CreateInstance ou ITransactionContext::CreateInstance. Por exemplo, se o Processo Base 1 usa CoCreateInstance para criar o Objeto X, quando o Objeto Y chama GetOriginalCallerSID , a ID de segurança que ele recebe de volta é a ID de segurança do usuário B, não do usuário D. Isso ocorre porque a sequência de chamadas é rastreada de volta pelo contexto dos objetos e o COM+ pode criar um contexto somente para um objeto criado com IObjectContext::CreateInstance ou ITransactionContext::CreateInstance.

Você deve chamar ReleaseSID em uma ID de segurança quando terminar de usá-la.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho comsvcs.h

Confira também

ISecurityProperty