ISecurityProperty::GetOriginalCallerSID 메서드(comsvcs.h)

현재 메서드가 호출된 호출 순서를 시작한 기본 프로세스의 보안 식별자를 검색합니다.

원래 호출자에 대한 정보를 가져오는 기본 방법은 ISecurityCallContext 인터페이스를 사용하는 것입니다.

구문

HRESULT GetOriginalCallerSID(
  [out] PSID *pSID
);

매개 변수

[out] pSID

현재 메서드가 호출된 호출 순서를 시작한 기본 프로세스의 보안 ID에 대한 참조입니다.

반환 값

이 메서드는 다음 값뿐만 아니라 표준 반환 값 E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTEDE_FAIL 반환할 수 있습니다.

반환 코드 Description
S_OK
현재 개체에 대한 호출을 시작한 기본 프로세스의 보안 ID는 pSid 매개 변수에 반환됩니다.
CONTEXT_E_NOCONTEXT
구성 요소를 애플리케이션으로 가져오지 않았거나 COM+ CreateInstance 메서드 중 하나를 사용하여 개체를 만들지 않았기 때문에 현재 개체에 연결된 컨텍스트가 없습니다.

설명

GetOriginalCallerSID 메서드를 사용하여 프로세스의 생성자(또는 작성자)가 아니라 현재 메서드가 호출된 호출 순서를 시작한 원래 프로세스의 보안 ID를 확인합니다. 개체에 대한 포인터는 일련의 서버와 사용자를 통해 전달할 수 있지만 GetOriginalCallerSID 는 해당 사용자가 개체의 원래 작성자가 아니더라도 항상 프로세스의 첫 번째 서버와 사용자를 반환합니다. 다음 시나리오에서는 GetOriginalCallerSID 메서드의 기능을 보여 줍니다.

두 개의 기본 프로세스를 실행하는 4개의 서버 간에 전달된 개체 참조에 대한 GetOriginalCallerSID 메서드의 결과를 보여 주는 다이어그램

  1. A 서버에서 사용자 A로 실행되는 기본 프로세스 1은 서버 B에서 사용자 B로 실행되는 개체 X를 만듭니다.
  2. 기본 프로세스 1은 개체 X에 대한 참조를 서버 D에서 사용자 D로 실행되는 기본 프로세스 2에 전달합니다.
  3. 기본 프로세스 2는 해당 참조를 사용하여 개체 X를 호출합니다.
  4. 개체 X는 서버 C에서 실행되는 Object Y를 호출합니다. 개체 Y가 GetOriginalCallerSID를 호출하면 원래 개체를 만든 사용자 A가 아니라 사용자 D의 보안 ID가 반환됩니다.
참고 일반적으로 개체의 원래 호출자는 원래 작성자와 동일한 프로세스입니다. 원래 호출자와 원래 작성자가 다른 유일한 상황은 원래 작성자가 다른 프로세스에 대한 참조를 전달하고 다른 프로세스가 호출 순서를 시작하는 상황입니다(이전 예제와 같이).
 
체인을 따라 개체가 IObjectContext::CreateInstance 또는 ITransactionContext::CreateInstance 이외의 다른 수단에 의해 만들어진 경우 원래 호출자의 경로가 끊어집니다. 예를 들어 기본 프로세스 1에서 CoCreateInstance 를 사용하여 개체 X를 만드는 경우 개체 Y 가 GetOriginalCallerSID를 호출할 때 다시 가져오는 보안 ID는 사용자 D가 아닌 사용자 B의 보안 ID입니다. 이는 호출 시퀀스가 개체의 컨텍스트를 통해 다시 추적되고 COM+가 IObjectContext::CreateInstance 또는 ITransactionContext::CreateInstance를 사용하여 만든 개체에 대해서만 컨텍스트를 만들 수 있기 때문입니다.

사용을 마치면 보안 ID에서 ReleaseSID 를 호출해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 comsvcs.h

추가 정보

ISecurityProperty