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