Bagikan melalui


Akun Pengguna dengan Penggantian Pengguna Cepat dan Dekstop Jarak Jauh

Akun pengguna Windows XP memungkinkan beberapa pengguna untuk masuk secara bersamaan, masing-masing dengan pengaturannya sendiri dan masing-masing menjalankan aplikasinya sendiri. Karena satu pengguna tidak perlu keluar untuk mengizinkan akses ke pengguna lain, desktop setiap pengguna mudah diakses menggunakan fitur peralihan pengguna cepat. Akun pengguna juga menyertakan fitur Server Terminal Pribadi, atau Desktop Jauh, yang memungkinkan pengguna mengakses akun desktop mereka dari sistem jarak jauh.

Topik berikut dibahas.

Persyaratan Penggunaan Infrastruktur

Infrastruktur dasar yang diwariskan dari Windows 2000 mendukung pemisahan status data pengguna, pengaturan pengguna, dan pengaturan komputer. Memanfaatkan infrastruktur ini, berikut ini diperlukan untuk berhasil menjalankan aplikasi Anda di bawah Windows XP.

  • Default ke folder Dokumen Saya untuk penyimpanan data yang dibuat pengguna.
  • Klasifikasikan dan simpan data aplikasi dengan benar.
  • Degradasi dengan baik pada pesan "Akses Ditolak".

File sementara, file yang dipetakan memori, dan dokumen semuanya harus disimpan dalam subdirektori direktori profil pengguna yang sesuai. Gunakan SHGetFolderLocation atau SHGetFolderPath untuk menentukan lokasi penyimpanan yang sesuai untuk file-file ini. Meneruskan bendera CSIDL_APPDATA ke fungsi-fungsi ini mengembalikan jalur direktori sistem file yang berfungsi sebagai repositori umum untuk data spesifik aplikasi. Gunakan bendera CSIDL_LOCAL_APPDATA menggantikan CSIDL_APPDATA untuk data yang harus berubah saat pengguna berubah, seperti file sementara.

Persyaratan yang tercantum di atas adalah subset dari yang ada dalam program Sertifikasi Microsoft. Untuk informasi selengkapnya, lihat halaman persyaratan Sertifikasi untuk Aplikasi Desktop Windows.

Kompatibilitas dengan Aplikasi yang Ada

Peralihan pengguna cepat dan Server Terminal Pribadi menggunakan teknologi Layanan Terminal dan oleh karena itu kompatibel dengan sebagian besar aplikasi Microsoft Win32 sebelumnya. Jika aplikasi mematuhi Logo Windows 2000, menerapkan pemisahan profil dasar dan fitur manajemen daya, aplikasi tersebut harus berjalan dengan benar di bawah akun pengguna Windows XP individual.

Mendaftar untuk Pemberitahuan Pengalihan Sesi

Biasanya, aplikasi tidak perlu diberi tahu ketika pengalihan desktop terjadi. Namun, aplikasi yang perlu diberi tahu ketika akun yang sedang berjalan menjadi desktop aktif, seperti aplikasi yang mengakses port serial atau sumber daya bersama lainnya, dapat mendaftar untuk menerima notifikasi ketika terjadi pengalihan desktop. Untuk mendaftar pemberitahuan, gunakan fungsi WTSRegisterSessionNotification.

Setelah fungsi tersebut dipanggil, jendela dengan handle hWnd terdaftar untuk menerima pesan WM_WTSSESSION_CHANGE melalui fungsi WndProc. ID sesi dikirim dalam lParam parameter, dan kode yang menunjukkan peristiwa yang menghasilkan pesan dikirim dalam wParam sebagai salah satu penanda berikut.

  • Hubungan Konsol (WTS_CONSOLE_CONNECT)
  • PUTUSKAN_KONSOL_WTS
  • Sambungan Jarak Jauh WTS
  • Pemutusan Sambungan Jarak Jauh WTS
  • Keluar dari Sesi WTS
  • WTS_SESI_LOGON

Aplikasi dapat menggunakan pesan ini untuk melacak statusnya, serta merilis dan memperoleh sumber daya khusus konsol. Desktop pengguna dapat dialihkan secara dinamis antara kontrol jarak jauh dan konsol. Aplikasi harus menggunakan pesan WM_WTSSESSION_CHANGE untuk menyinkronkan dengan status koneksi jarak jauh atau lokal.

Ketika proses Anda tidak lagi memerlukan pemberitahuan ini atau dihentikan, proses tersebut harus memanggil WTSUnRegisterSessionNotification untuk membatalkan pendaftaran pemberitahuannya.

Penting

Nilai hWnd yang diteruskan keWTSRegisterSessionNotification dihitung sebagai referensi, jadi Anda harus melakukan jumlah panggilan yang sama ke WTSUnRegisterSessionNotification untuk memastikan rilis semua sumber daya yang dialokasikan.

 

Memastikan Hanya Satu Instans Aplikasi Anda yang Berjalan

Banyak aplikasi harus memastikan bahwa mereka hanya memiliki satu instans yang berjalan. Ada beberapa cara untuk melakukan ini di Windows XP. Di antaranya adalah sebagai berikut:

  • Gunakan FindWindow atau FindWindowEx untuk mencari jendela yang diketahui yang dibuka aplikasi Anda. Jika jendela tersebut sudah terbuka, Anda dapat menggunakannya sebagai indikasi bahwa aplikasi sudah berjalan.
  • Buat objek mutex atau semaphore saat aplikasi Anda dibuka, dan tutup objek tersebut saat aplikasi berakhir. Namespace obyek global dipisahkan untuk setiap desktop, yang memungkinkan daftar unik obyek mutex dan semafor untuk masing-masing.

Mematikan Aplikasi Anda di Semua Sesi

Aplikasi mungkin perlu mematikan dirinya sendiri di semua sesi. Misalnya, aplikasi yang berjalan dalam dua sesi atau lebih secara bersamaan mungkin mengunduh file baru dari web. Kemudian mungkin perlu menutup dan memulai ulang dengan komponen yang diperbarui. Ini, tentu saja, perlu dilakukan dalam semua sesi yang sedang berjalan. Aplikasi Anda harus ditulis sehingga keluar dengan bersih saat pemberitahuan diterima.

Interaksi dengan Layanan Sistem

Dari sudut pemrograman, kasus berikut perlu ditangani.

  • Proses server menerima permintaan langsung dari proses klien.

    Dalam hal ini, pesan mungkin dikirimkan menggunakan panggilan prosedur lokal (LPC) atau panggilan prosedur jarak jauh (RPC). Ada API untuk LPC atau RPC yang memungkinkan pengambilan token klien. Setelah token klien diperoleh, server dapat menggunakannya dalam panggilan ke CreateProcessAsUser. Ini memunculkan proses di stasiun jendela yang benar dengan asumsi bahwa token pengguna klien memiliki tag sesi, seperti seharusnya.

    Nota

    CreateProcessAsUser tidak mendukung pewarisan handle antar sesi saat ini.

     

  • Proses server menerima pemberitahuan dan perlu menampilkan UI, tetapi tampilan tidak harus dalam konteks pengguna saat ini.

    Dalam hal ini, proses server dapat menduplikasi token proses utamanya dan mengubah pengidentifikasi sesi yang dimaksud agar sesuai dengan pengidentifikasi sesi saat ini. Pengidentifikasi sesi saat ini dapat diperoleh dengan menggunakan fungsiWTSGetActiveConsoleSessionId.

    Nota

    Untuk mengatur ID sesi token, Anda memerlukan SE_TCB_PRIVILEGE. Anda hanya akan memiliki ini sebagai layanan yang berjalan di NT AUTHORITY\SYSTEM.

     

Desktop Jarak Jauh dan Bandwidth

Dengan penambahan fitur Desktop Jauh ke Windows XP, aplikasi harus berupaya untuk tidak menggunakan lebih banyak bandwidth daripada yang diperlukan, menghindari gambar layar yang luas dan efek animasi jika desktop terhubung dari jarak jauh. Untuk menentukan apakah sesi jarak jauh saat ini, Anda dapat memanggil GetSystemMetrics dengan SM_REMOTESESSION. Ketahuilah, bagaimanapun, bahwa panggilan ini tidak membedakan antara jarak jauh dan terputus.