Oturum Tanıtıcı Kullanma
Oturumdan oturuma etkinleştirme, istemci işleminin belirtilen bir oturumda yerel sunucu işlemini etkinleştirmesine olanak tanır. Bunu, sistem tarafından sağlanan bir oturum tanıtıcı kullanarak oturum bazında yapabilirsiniz. Oturum belirteci oluşturma hakkında daha fazla bilgi için bkz. Oturum Belirteci ile Oturumdan Oturuma Etkinleştirme.
Aşağıdaki örnekte, oturum kimliği 3 olan oturumda "10000013-0000-0000-0000-00000000001" sınıf kimliğine sahip bir yerel sunucu işleminin nasıl etkinleştirlendiği gösterilmektedir.
İlk olarak örnek, COM kitaplığını başlatmak için CoInitialize işlevini çağırır. Ardından örnek, CreateBindCtx'ü, IBindCtx arabiriminin bir uygulamasına yönelik bir işaretçi almak için çağırır. Bu nesne, takma ad bağlama işlemleri hakkındaki bilgileri depolar; işaretçisi, IMoniker arabiriminin yöntemlerini çağırmak için gereklidir. Daha sonra örnek, bileşik oturum adını oluşturmak için MkParseDisplayNameEx işlevini ve ardından istemci ile sunucu işlemi arasındaki bağlantıyı etkinleştirmek için IMoniker::BindToObject yöntemini çağırır ve yeni oluşturulan oturum adını kullanır. Bu noktada, nesne üzerinde istenen işlemleri gerçekleştirmek için arabirim işaretçisini kullanabilirsiniz. Son olarak, örnek bağlama bağlamını serbest bırakır ve CoUninitialize işlevini çağırır.
// 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.
"{class id of the class moniker}" aynı zamanda bir sınıf takma adını adlandırmak için bir yol olduğundan, bileşik takma adını (sınıf takma adıyla birleştirilmiş oturum takma adı) önceki örnekte gösterilen yöntem yerine aşağıdaki dizeyi kullanarak adlandırabilirsiniz.
OLECHAR string[] =
L"Session:3!{0000031A-0000-0000-C000-000000000046}:
10000013-0000-0000-0000-000000000001";
Not
Oturumlar arası etkinleştirme sırasında her oturumda aynı kullanıcı oturum açtıysa, RunAs Etkileşimli Kullanıcı etkinleştirme modunda çalışacak şekilde yapılandırılmış tüm sunucu işlemlerini başarıyla etkinleştirebilirsiniz. Her oturumda farklı kullanıcılar oturum açtıysa, sunucu, istemci ile sunucu arasında başarılı bir etkinleştirme ve bağlantı kurulmadan önce uygun kullanıcı haklarını ayarlamak için CoInitializeSecurity işlevini çağırmalıdır. Bunu gerçekleştirmenin bir yolu, sunucunun özel IAccessControl arabirimini uygulaması ve uygulamayı CoInitializeSecurityuygulamasına geçirmesi olabilir. Her durumda, istemci kullanıcının sunucuda çalışan uygulama tarafından belirtilen uygun Başlatma ve Erişim İzinleri olması gerekir. Daha fazla bilgi için bkz. COM Güvenliği.
Sistem tarafından sağlanan takma adlar ile takma adlar ve etkinleştirme modları hakkında daha fazla bilgi için Platform Yazılım Geliştirme Seti'ndeki (SDK) COM belgelerinde Monikers, IMoniker arabirimi ve AppId Anahtarı bölümüne bakın.