Метод ISecurityProperty::GetOriginalCallerSID (comsvcs.h)

Извлекает идентификатор безопасности базового процесса, который инициировал последовательность вызовов, из которой был вызван текущий метод.

Предпочтительным способом получения сведений об исходном вызывающем объекте является использование интерфейса ISecurityCallContext .

Синтаксис

HRESULT GetOriginalCallerSID(
  [out] PSID *pSID
);

Параметры

[out] pSID

Ссылка на идентификатор безопасности базового процесса, который инициировал последовательность вызовов, из которой был вызван текущий метод.

Возвращаемое значение

Этот метод может возвращать стандартные возвращаемые значения E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED и E_FAIL, а также следующие значения.

Код возврата Описание
S_OK
Идентификатор безопасности базового процесса, который вызвал текущий объект, возвращается в параметре pSid.
CONTEXT_E_NOCONTEXT
Текущий объект не имеет контекста, связанного с ним, так как компонент не был импортирован в приложение или объект не был создан с помощью одного из методов COM+ CreateInstance .

Комментарии

Метод GetOriginalCallerSID используется для определения идентификатора безопасности исходного процесса, который инициировал последовательность вызовов, из которой был вызван текущий метод, а не инициатора (или создателя) процесса. Хотя указатель на объект может передаваться через ряд серверов и пользователей, GetOriginalCallerSID всегда возвращает первый сервер и пользователя процесса, даже если этот пользователь не был первоначальным создателем объекта. В следующем сценарии показаны функциональные возможности метода GetOriginalCallerSID .

Схема, показывающая результаты метода GetOriginalCallerSID для ссылок на объекты, передаваемых между четырьмя серверами, на которых выполняются два базовых процесса.

  1. Базовый процесс 1, запущенный на сервере A от имени пользователя A, создает объект X на сервере B, выполняющийся от имени пользователя B.
  2. Базовый процесс 1 передает свою ссылку на объект X базовому процессу 2, который выполняется на сервере D в качестве пользователя D.
  3. Базовый процесс 2 использует ссылку для вызова объекта X.
  4. Объект X вызывает объект Y, работающий на сервере C. Если объект Y вызывает GetOriginalCallerSID, возвращается идентификатор безопасности пользователя D, а не пользователя A, который изначально создал объект.
Примечание Как правило, исходный вызывающий объект является тем же процессом, что и его исходный создатель. Единственная ситуация, в которой исходный вызывающий объект и исходный создатель будут отличаться, — это ситуация, в которой исходный создатель передает ссылку на другой процесс, а другой процесс инициирует последовательность вызовов (как в предыдущем примере).
 
Путь к исходному вызывающому объекту нарушается, если какой-либо объект в цепочке был создан с помощью каких-либо средств, отличных от IObjectContext::CreateInstance или ITransactionContext::CreateInstance. Например, если базовый процесс 1 использует CoCreateInstance для создания объекта X, то, когда объект Y вызывает GetOriginalCallerSID , идентификатор безопасности, который он возвращает, будет идентификатором безопасности пользователя B, а не пользователя D. Это связано с тем, что последовательность вызовов трассируется обратно через контекст объектов, и COM+ может создать контекст только для объекта, созданного с помощью IObjectContext::CreateInstance или ITransactionContext::CreateInstance.

Вы должны вызвать ReleaseSID для идентификатора безопасности по завершении его использования.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header comsvcs.h

См. также раздел

ISecurityProperty