Freigeben über


ISecurityProperty::GetOriginalCallerSID-Methode (comsvcs.h)

Ruft den Sicherheitsbezeichner des Basisprozesses ab, der die Aufrufsequenz initiiert hat, aus der die aktuelle Methode aufgerufen wurde.

Die bevorzugte Methode zum Abrufen von Informationen über den ursprünglichen Aufrufer ist die Verwendung der ISecurityCallContext-Schnittstelle .

Syntax

HRESULT GetOriginalCallerSID(
  [out] PSID *pSID
);

Parameter

[out] pSID

Ein Verweis auf die Sicherheits-ID des Basisprozesses, der die Aufrufsequenz initiiert hat, aus der die aktuelle Methode aufgerufen wurde.

Rückgabewert

Diese Methode kann die standardmäßigen Rückgabewerte E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED und E_FAIL sowie die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Die Sicherheits-ID des Basisprozesses, der den Aufruf des aktuellen Objekts ausgelöst hat, wird im Parameter pSid zurückgegeben.
CONTEXT_E_NOCONTEXT
Dem aktuellen Objekt ist kein Kontext zugeordnet, da entweder die Komponente nicht in eine Anwendung importiert wurde oder das Objekt nicht mit einer der CREATEInstance-Methoden von COM+ erstellt wurde.

Hinweise

Sie verwenden die GetOriginalCallerSID-Methode , um die Sicherheits-ID des ursprünglichen Prozesses zu bestimmen, der die Aufrufsequenz initiiert hat, aus der die aktuelle Methode aufgerufen wurde, nicht des Absenders (oder Erstellers) des Prozesses. Obwohl ein Zeiger auf ein Objekt über eine Reihe von Servern und Benutzern übergeben werden kann, gibt GetOriginalCallerSID immer den ersten Server und Benutzer des Prozesses zurück, auch wenn dieser Benutzer nicht der ursprüngliche Ersteller des Objekts war. Das folgende Szenario veranschaulicht die Funktionalität der GetOriginalCallerSID-Methode .

Diagramm: Ergebnisse der GetOriginalCallerSID-Methode für Objektverweise, die zwischen vier Servern mit zwei Basisprozessen übergeben werden.

  1. Der Basisprozess 1, der auf Server A als Benutzer A ausgeführt wird, erstellt Objekt X auf Server B, das als Benutzer B ausgeführt wird.
  2. Der Basisprozess 1 übergibt seinen Verweis auf Objekt X an Den Basisprozess 2, der auf Server D als Benutzer D ausgeführt wird.
  3. Basisprozess 2 verwendet diesen Verweis, um Objekt X aufzurufen.
  4. Objekt X ruft Objekt Y auf, das auf Server C ausgeführt wird. Wenn Object Y dann GetOriginalCallerSID aufruft, wird die Sicherheits-ID von Benutzer D zurückgegeben, nicht von Benutzer A, der das Objekt ursprünglich erstellt hat.
Hinweis Normalerweise ist der ursprüngliche Aufrufer eines Objekts derselbe Prozess wie sein ursprünglicher Ersteller. Die einzige Situation, in der sich der ursprüngliche Aufrufer und der ursprüngliche Ersteller unterscheiden, ist eine, in der der ursprüngliche Ersteller einen Verweis an einen anderen Prozess übergibt und der andere Prozess die Aufrufsequenz initiiert (wie im vorherigen Beispiel).
 
Der Pfad zum ursprünglichen Aufrufer wird unterbrochen, wenn ein Objekt entlang der Kette mit anderen Mitteln als IObjectContext::CreateInstance oder ITransactionContext::CreateInstance erstellt wurde. Wenn der Basisprozess 1 beispielsweise CoCreateInstance zum Erstellen von Objekt X verwendet, ist beim Aufrufen von GetOriginalCallerSID die Sicherheits-ID von Benutzer B und nicht von Benutzer D. Dies liegt daran, dass die Aufrufsequenz durch den Kontext der Objekte zurückverfolgt wird und COM+ nur einen Kontext für ein Objekt erstellen kann, das entweder mit IObjectContext::CreateInstance oder ITransactionContext::CreateInstance erstellt wird.

Sie müssen ReleaseSID für eine Sicherheits-ID aufrufen, wenn Sie die Verwendung abgeschlossen haben.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile comsvcs.h

Weitere Informationen

ISecurityProperty