Partager via


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

Récupère l’identificateur de sécurité du processus de base qui a lancé la séquence d’appels à partir de laquelle la méthode actuelle a été appelée.

La meilleure façon d’obtenir des informations sur l’appelant d’origine consiste à utiliser l’interface ISecurityCallContext .

Syntaxe

HRESULT GetOriginalCallerSID(
  [out] PSID *pSID
);

Paramètres

[out] pSID

Référence à l’ID de sécurité du processus de base qui a lancé la séquence d’appels à partir de laquelle la méthode actuelle a été appelée.

Valeur retournée

Cette méthode peut retourner les valeurs de retour standard E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED et E_FAIL, ainsi que les valeurs suivantes.

Code de retour Description
S_OK
L’ID de sécurité du processus de base à l’origine de l’appel à l’objet actuel est retourné dans le paramètre pSid.
CONTEXT_E_NOCONTEXT
L’objet actuel n’a pas de contexte associé, car le composant n’a pas été importé dans une application ou l’objet n’a pas été créé avec l’une des méthodes COM+ CreateInstance .

Remarques

Vous utilisez la méthode GetOriginalCallerSID pour déterminer l’ID de sécurité du processus d’origine qui a lancé la séquence d’appels à partir de laquelle la méthode actuelle a été appelée, et non l’auteur (ou le créateur) du processus. Bien qu’un pointeur vers un objet puisse être transmis via une série de serveurs et d’utilisateurs, GetOriginalCallerSID retourne toujours le premier serveur et le premier utilisateur du processus, même si cet utilisateur n’était pas le créateur d’origine de l’objet. Le scénario suivant illustre les fonctionnalités de la méthode GetOriginalCallerSID .

Diagramme montrant les résultats de la méthode GetOriginalCallerSID pour les références d’objets passées entre quatre serveurs exécutant deux processus de base.

  1. Le processus de base 1, exécuté sur le serveur A en tant qu’utilisateur A, crée l’objet X, sur le serveur B, s’exécutant en tant qu’utilisateur B.
  2. Le processus de base 1 transmet sa référence sur l’objet X au processus de base 2, s’exécutant sur le serveur D en tant qu’utilisateur D.
  3. Le processus de base 2 utilise cette référence pour appeler l’objet X.
  4. L’objet X appelle l’objet Y, s’exécutant sur le serveur C. Si l’objet Y appelle alors GetOriginalCallerSID, l’ID de sécurité de l’utilisateur D est retourné, et non l’utilisateur A, qui a créé l’objet à l’origine.
Note En règle générale, l’appelant d’origine d’un objet est le même processus que son créateur d’origine. La seule situation dans laquelle l’appelant d’origine et le créateur d’origine seraient différents est celle dans laquelle le créateur d’origine transmet une référence à un autre processus et l’autre processus lance la séquence d’appels (comme dans l’exemple précédent).
 
Le chemin d’accès à l’appelant d’origine est rompu si un objet le long de la chaîne a été créé par d’autres moyens que IObjectContext ::CreateInstance ou ITransactionContext ::CreateInstance. Par exemple, si le processus de base 1 utilise CoCreateInstance pour créer l’objet X, lorsque L’objet Y appelle GetOriginalCallerSID , l’ID de sécurité qu’il récupère est l’ID de sécurité de l’utilisateur B, et non l’utilisateur D. Cela est dû au fait que la séquence d’appels est tracée dans le contexte des objets et QUE COM+ peut créer un contexte uniquement pour un objet créé avec IObjectContext ::CreateInstance ou ITransactionContext ::CreateInstance.

Vous devez appeler ReleaseSID sur un ID de sécurité lorsque vous avez terminé de l’utiliser.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête comsvcs.h

Voir aussi

ISecurityProperty