다음을 통해 공유


세션 모니커 사용

세션-세션 활성화를 사용하면 클라이언트 프로세스가 지정된 세션에서 로컬 서버 프로세스를 활성화할 수 있습니다. 시스템 제공 세션 모니커를 사용하여 세션별로 이 작업을 수행할 수 있습니다. 세션 모니커를 만드는 방법에 대한 자세한 내용은 세션 모니커를 사용하여 세션-세션 활성화를 참조하세요.

다음 예제에서는 세션 ID가 3인 세션에서 클래스 ID가 "100000013-0000-0000-0000-0000000000001"인 로컬 서버 프로세스를 활성화하는 방법을 보여 있습니다.

먼저 샘플은 CoInitialize 함수를 호출하여 COM 라이브러리를 초기화합니다. 그런 다음, 샘플은 CreateBindCtx 를 호출하여 IBindCtx 인터페이스의 구현에 대한 포인터를 검색합니다. 이 개체는 모니커 바인딩 작업에 대한 정보를 저장합니다. 포인터는 IMoniker 인터페이스의 메서드를 호출하는 데 필요합니다. 다음으로 샘플은 MkParseDisplayNameEx 함수를 호출하여 복합 세션 모니커를 만든 다음 , IMoniker::BindToObject 메서드를 호출하여 새로 만든 세션 모니커를 사용하여 클라이언트와 서버 프로세스 간의 연결을 활성화합니다. 이 시점에서 인터페이스 포인터를 사용하여 개체에 대해 원하는 작업을 수행할 수 있습니다. 마지막으로 샘플은 바인딩 컨텍스트를 해제하고 CoUninitialize 함수를 호출합니다.

// Initialize COM.

HRESULT hr = CoInitialize(NULL);
if (FAILED(hr)) exit(0);  // Handle errors here.

// Get interface pBindCtx.

IBindCtx* pBindCtx;
hr = CreateBindCtx(NULL, &pBindCtx);
if (FAILED(hr)) exit(0);  // Handle errors here.

// Get moniker pMoniker.

OLECHAR string[] =
    L"Session:3!clsid:10000013-0000-0000-0000-000000000001";
ULONG ulParsed;
IMoniker* pMoniker;
hr = MkParseDisplayNameEx( pBindCtx,
                           string,
                           &ulParsed,
                           &pMoniker
                          );
if (FAILED(hr)) exit(0);  // Handle errors here.

// Get object factory pSessionTestFactory.

IUnknown* pSessionTestFactory;
hr = pMoniker->BindToObject( pBindCtx,
                             NULL,
                             IID_IUnknown,
                             (void**)&pSessionTestFactory
                            );
if (FAILED(hr)) exit(0);  // Handle errors here.

//
// Make, use, and destroy object here.
//
pSessionTestFactory->Release();
pSessionTestFactory = NULL;

pMoniker->Release();  // Release moniker.

pBindCtx->Release();  // Release interface.

CoUninitialize();  // Release COM.

"{클래스 모니커}의 클래스 ID"는 클래스 모니커의 이름을 지정하는 방법이기도 하므로 다음 문자열을 사용하여 앞의 예제에 표시된 방식 대신 복합 모니커(클래스 모니커로 구성된 세션 모니커)의 이름을 지정할 수 있습니다.

OLECHAR string[] = 
    L"Session:3!{0000031A-0000-0000-C000-000000000046}:
    10000013-0000-0000-0000-000000000001";

참고

세션 간 활성화 중에 동일한 사용자가 각 세션에 로그온된 경우 실행 대화형 사용자 활성화 모드에서 실행되도록 구성된 모든 서버 프로세스를 성공적으로 활성화할 수 있습니다. 다른 사용자가 각 세션에 로그온하는 경우 서버는 CoInitializeSecurity 함수를 호출하여 적절한 사용자 권한을 설정해야 클라이언트와 서버 간에 성공적인 활성화 및 연결이 발생할 수 있습니다. 이를 수행하는 한 가지 방법은 서버가 사용자 지정 IAccessControl 인터페이스를 구현하고 구현을 CoInitializeSecurity에 전달하는 것입니다. 어떤 경우든 클라이언트 사용자에게 서버에서 실행되는 애플리케이션에 의해 지정된 적절한 시작액세스 권한이 있어야 합니다. 자세한 내용은 COM의 보안을 참조하세요.

 

시스템 제공 모니커 및 모니커 및 활성화 모드에 대한 자세한 내용은 플랫폼 SDK(소프트웨어 개발 키트)의 COM 설명서에서 모니커, IMoniker 인터페이스 및 AppId 키를 참조하세요.