Condividi tramite


Metodo ISecurityProperty::GetOriginalCallerSID (comsvcs.h)

Recupera l'identificatore di sicurezza del processo di base che ha avviato la sequenza di chiamata al metodo corrente.

Il modo preferito per ottenere informazioni sul chiamante originale consiste nell'usare l'interfaccia ISecurityCallContext .

Sintassi

HRESULT GetOriginalCallerSID(
  [out] PSID *pSID
);

Parametri

[out] pSID

Riferimento all'ID di sicurezza del processo di base che ha avviato la sequenza di chiamata al metodo corrente.

Valore restituito

Questo metodo può restituire i valori restituiti standard E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED e E_FAIL, nonché i valori seguenti.

Codice restituito Descrizione
S_OK
L'ID di sicurezza del processo di base che ha originato la chiamata all'oggetto corrente viene restituito nel parametro pSid.
CONTEXT_E_NOCONTEXT
L'oggetto corrente non dispone di un contesto associato perché il componente non è stato importato in un'applicazione o l'oggetto non è stato creato con uno dei metodi CREATEInstance COM+.

Commenti

Utilizzare il metodo GetOriginalCallerSID per determinare l'ID di sicurezza del processo originale che ha avviato la sequenza di chiamata al metodo corrente, non l'origine (o il creatore) del processo. Anche se un puntatore a un oggetto può essere passato attraverso una serie di server e utenti, GetOriginalCallerSID restituisce sempre il primo server e l'utente del processo, anche se tale utente non era l'autore originale dell'oggetto. Lo scenario seguente illustra la funzionalità del metodo GetOriginalCallerSID .

Diagramma che mostra i risultati del metodo GetOriginalCallerSID per i riferimenti a oggetti passati tra quattro server che eseguono due processi di base.

  1. Processo di base 1, in esecuzione nel server A come utente A, crea Object X, nel server B, in esecuzione come utente B.
  2. Il processo di base 1 passa il riferimento su Object X al processo di base 2, in esecuzione nel server D come utente D.
  3. Il processo di base 2 usa tale riferimento per chiamare in Object X.
  4. Object X chiama in Object Y, in esecuzione nel server C. Se Object Y chiama GetOriginalCallerSID, viene restituito l'ID di sicurezza dell'utente D, non l'utente A, che ha originariamente creato l'oggetto.
Nota In genere, il chiamante originale di un oggetto è lo stesso processo del creatore originale. L'unica situazione in cui il chiamante originale e l'autore originale sarebbero diversi è quello in cui l'autore originale passa un riferimento a un altro processo e l'altro processo avvia la sequenza di chiamata (come nell'esempio precedente).
 
Il percorso del chiamante originale viene interrotto se un oggetto lungo la catena è stato creato con un mezzo diverso da IObjectContext::CreateInstance o ITransactionContext::CreateInstance. Ad esempio, se il processo di base 1 usa CoCreateInstance per creare Object X, quando Object Y chiama GetOriginalCallerSID l'ID di sicurezza restituito è l'ID di sicurezza dell'utente B, non dell'utente D. Ciò avviene perché la sequenza di chiamata viene tracciata nel contesto degli oggetti e COM+ può creare un contesto solo per un oggetto creato con IObjectContext::CreateInstance o ITransactionContext::CreateInstance.

È necessario chiamare ReleaseSID su un ID di sicurezza al termine dell'uso.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione comsvcs.h

Vedi anche

ISecurityProperty