İngilizce dilinde oku

Aracılığıyla paylaş


Hızlı Kullanıcı Değiştirme ve Uzak Masaüstü ile Kullanıcı Hesapları

Windows XP kullanıcı hesapları, her biri kendi ayarlarıyla ve her biri kendi uygulamalarını çalıştıran birden çok kullanıcının aynı anda oturum açmasını sağlar. Her kullanıcının masaüstüne hızlı kullanıcı geçiş özelliği kullanılarak kolayca erişim sağlanabilir çünkü bir kullanıcının başka bir kullanıcıya erişime izin vermek için oturumunu kapatması gerekmez. Kullanıcı hesapları, kullanıcıların uzak sistemlerden masaüstü hesaplarına erişmesini sağlayan Kişisel Terminal Sunucusu özelliğini veya Uzak Masaüstü'nü de içerir.

Aşağıdaki konular ele alınıyor.

Altyapı Kullanım Gereksinimleri

Windows 2000'den devralınan temel altyapı, kullanıcı verilerinin, kullanıcı ayarlarının ve bilgisayar ayarlarının durum ayrımını destekler. Bu altyapıdan yararlanarak, uygulamanızı Windows XP altında başarıyla çalıştırmak için aşağıdakiler gereklidir.

  • Varsayılan olarak, kullanıcı tarafından oluşturulan verilerin depolanması için Belgelerim klasörü.
  • Uygulama verilerini doğru şekilde sınıflandırıp depolayın.
  • "Erişim Reddedildi" iletilerinde düzgün bir şekilde düşürülebilir.

Geçici dosyalar, belleğe eşlenen dosyalar ve belgelerin tümü kullanıcının profil dizininin uygun alt dizininde depolanmalıdır. Bu dosyalar için uygun depolama konumunu belirlemek için SHGetFolderLocation veya SHGetFolderPath kullanın. CSIDL_APPDATA bayrağını bu işlevlere geçirmek, uygulamaya özgü veriler için ortak bir depo işlevi görecek bir dosya sistemi dizininin yolunu döndürür. Geçici dosyalar gibi kullanıcı değiştiğinde değişmesi gereken veriler için CSIDL_APPDATA yerine bayrak CSIDL_LOCAL_APPDATA kullanın.

Yukarıda listelenen gereksinimler, Microsoft Sertifikasyon programındakilerin bir alt kümesidir. Daha fazla bilgi için Windows Masaüstü Uygulamaları için Sertifika gereksinimleri sayfasına bakın.

Mevcut Uygulamalarla Uyumluluk

Hem hızlı kullanıcı değiştirme hem de Kişisel Terminal Sunucusu, Terminal Hizmetleri teknolojisini kullanır ve bu nedenle önceki Microsoft Win32 uygulamalarının çoğuyla uyumludur. Bir uygulama, temel profil ayrımı ve güç yönetimi özellikleri uygulayan Windows 2000 Logo uyumluysa, bu uygulamanın tek tek Windows XP kullanıcı hesapları altında düzgün çalışması gerekir.

Oturum Değiştirme Bildirimine Kaydolma

Genellikle bir masaüstü geçişi gerçekleştiğinde bir uygulamaya bildirim verilmesi gerekmez. Ancak, seri bağlantı noktasına veya diğer paylaşılan kaynaklara erişen uygulamalar gibi üzerinde çalıştıkları hesabın geçerli masaüstü olduğu durumda haberdar edilmesi gereken uygulamalar, masaüstü değişikliği bildirimi için kaydolabilir. Bildirime kaydolmak için WTSRegisterSessionNotification işlevini kullanın.

Bu işlev çağrıldıktan sonra, hWnd tanıtıcıya sahip pencere, WndProc işlevi aracılığıyla WM_WTSSESSION_CHANGE iletisini almak üzere kaydedilir. Oturum kimliği lParam parametresinde ve iletiyi oluşturan olayı gösteren bir kod wParam aşağıdaki bayraklardan biri olarak gönderilir.

  • WTS_Konsol_Bağlantı
  • WTS_CONSOLE_DISCONNECT
  • WTS_REMOTE_CONNECT
  • WTS_Uzak Bağlantı Kesildi
  • WTS_SESSION_LOGOFF
  • WTS_SESSION_LOGON

Uygulamalar, durumlarını izlemek ve konsola özgü kaynakları serbest bırakmak ve almak için bu iletiyi kullanabilir. Kullanıcı masaüstleri uzak ve konsol denetimi arasında dinamik olarak değiştirilebilir. Uygulamalar, uzak veya yerel bağlantı durumuyla eşitlemek için WM_WTSSESSION_CHANGE iletisini kullanmalıdır.

İşleminiz artık bu bildirimleri gerektirmediğinde veya sonlandırıldığında, bildirim kaydını kaldırmak için WTSUnRegisterSessionNotification çağrısı yapmalıdır.

Önemli

WTSRegisterSessionNotification aktarılan hWnd değerlerinin referans sayısı tutulur, bu nedenle ayrılan tüm kaynakların serbest bırakılmasını sağlamak için WTSUnRegisterSessionNotification eşit sayıda çağrı yapmalısınız.

 

Uygulamanızın yalnızca bir örneğinin çalıştığından emin olun

Birçok uygulama, yalnızca bir örneğin çalıştığından emin olmalıdır. Windows XP'de bunu yapmanın birkaç yolu vardır. Bunlar arasında şunlar yer alır:

  • Uygulamanızın açtığı bilinen bir pencereyi aramak için FindWindowveya FindWindowExkullanın. Bu pencere zaten açıksa, uygulamanın zaten çalıştığının göstergesi olarak bunu kullanabilirsiniz.
  • Uygulamanız açıldığında bir mutex veya semafor nesnesi oluşturun ve uygulama sonlandırıldığında bu nesneyi kapatın. Genel nesne ad alanı her masaüstü için ayrılmıştır ve her biri için benzersiz bir mutex ve semafor nesneleri listesi sağlar.

Uygulamanızı Tüm Oturumlarda Kapatma

Bir uygulamanın tüm oturumlarda kendisini kapatması gerekebilir. Örneğin, aynı anda iki veya daha fazla oturumda çalışan bir uygulama web'den yeni bir dosya indirebilir. Ardından kendisini kapatıp güncelleştirilmiş bitlerle yeniden başlatması gerekebilir. Bunun elbette tüm çalışan oturumlarda yapılması gerekir. Uygulamanız, bir bildirim alındığında temiz bir şekilde çıkarılacak şekilde yazılmalıdır.

Sistem Hizmetleri ile etkileşim

Programlı bir bakış açısından aşağıdaki durumların ele alınması gerekir.

  • Sunucu işlemi, bir istemci işleminden doğrudan istek alır.

    Bu durumda, ileti büyük olasılıkla yerel yordam çağrısı (LPC) veya uzak yordam çağrısı (RPC) kullanılarak iletilir. LPC veya RPC için istemci belirtecinin alınmasını etkinleştiren API'ler vardır. İstemci belirteci alındıktan sonra, sunucu CreateProcessAsUserçağrısında kullanabilir. Bu, istemci kullanıcı belirtecinin bir oturum etiketine sahip olduğunu varsayarak işlemi doğru pencere istasyonunda ortaya çıkarır ve bunu yapması gerekir.

    Not

    CreateProcessAsUser şu anda oturumlar arasında devralmayı desteklemez.

     

  • Sunucu bir bildirim alır ve kullanıcı arabirimini görüntülemesi gerekir, ancak görüntülemenin mevcut kullanıcının bağlamında olması gerekmez.

    Bu durumda, sunucu işlemi birincil işlem belirtecini çoğaltabilir ve söz konusu oturum tanımlayıcısını geçerli oturum tanımlayıcısıyla eşleşecek şekilde değiştirebilir. Geçerli oturum tanımlayıcısı WTSGetActiveConsoleSessionId işlevi kullanılarak alınabilir.

    Not

    Belirteç oturum kimliğini ayarlamak için SE_TCB_PRIVILEGEgerekir. Bunu yalnızca NT AUTHORITY\SYSTEM içinde çalışan bir hizmet olarak alırsınız.

     

Uzak Masaüstü ve Bant Genişliği

Uzak Masaüstü özelliğinin Windows XP'ye eklenmesiyle, uygulamalar gerektiğinden daha fazla bant genişliği kullanmamak için çaba harcamalı ve masaüstü uzaktan bağlıysa kapsamlı ekran çizimleri ve animasyon efektlerinden kaçınmalıdır. Geçerli oturumun uzak olup olmadığını belirlemek için, SM_REMOTESESSIONile GetSystemMetrics çağırabilirsiniz. Ancak, bu çağrının uzak ve bağlantısı kesilmiş arasında ayrım yapmadığını unutmayın.