Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik ini menjelaskan cara berbagi objek bernama antara aplikasi Universal Windows Platform (UWP) dan aplikasi Win32.
Objek bernama dalam aplikasi paket
Objek bernama menyediakan cara mudah bagi proses untuk berbagi handle objek. Setelah suatu proses membuat objek bernama, proses-proses lain dapat menggunakan nama tersebut untuk memanggil fungsi yang sesuai guna membuka handle ke objek. Objek bernama umumnya digunakan untuk sinkronisasi utas dan komunikasi antarproses.
Secara default, aplikasi paket hanya dapat mengakses objek bernama yang telah mereka buat. Untuk berbagi objek bernama dengan aplikasi paket, izin harus diatur saat objek dibuat, dan nama harus memenuhi syarat saat objek dibuka.
Membuat objek bernama
Objek bernama dibuat dengan API Create yang sesuai:
- BuatAcara
- CreateFileMapping
- BuatMutex
- BuatSemaphore
- CreateWaitableTimer
Semua API ini berbagi parameter LPSECURITY_ATTRIBUTES yang memungkinkan pemanggil menentukan daftar kontrol akses (ACL) untuk mengontrol proses apa yang dapat mengakses objek. Untuk berbagi objek bernama dengan aplikasi paket, izin harus diberikan dalam ACL saat objek bernama dibuat.
Pengidentifikasi keamanan (SID) mewakili identitas dalam ACL. Setiap aplikasi yang dikemas memiliki SID sendiri berdasarkan nama keluarga paketnya. Anda dapat membuat SID untuk aplikasi yang dikemas dengan meneruskan nama keluarga paketnya ke DeriveAppContainerSidFromAppContainerName.
Nota
Nama keluarga paket dapat ditemukan melalui editor manifes paket di Visual Studio selama waktu pengembangan, melalui Pusat Mitra untuk aplikasi yang diterbitkan melalui Microsoft Store, atau melalui perintah Get-AppxPackage PowerShell untuk aplikasi yang sudah diinstal.
Sampel ini menunjukkan pola dasar yang diperlukan untuk daftar kontrol akses (ACL) objek yang dinamai. Untuk berbagi objek bernama dengan aplikasi paket, buat struktur EXPLICIT_ACCESS untuk setiap aplikasi:
grfAccessMode = GRANT_ACCESS-
grfAccessPermissions =izin yang sesuai berdasarkan objek dan penggunaan yang dimaksudkan grfInheritance = NO_INHERITANCETrustee.TrusteeForm = TRUSTEE_IS_SIDTrustee.TrusteeType = TRUSTEE_IS_USER-
Trustee.ptstrName =SID yang diperoleh dari DeriveAppContainerSidFromAppContainerName
Dengan mengisi parameter LPSECURITY_ATTRIBUTES dalam panggilan Create dengan aturan EXPLICIT_ACCESS untuk aplikasi paket, Anda dapat memberikan akses ke aplikasi tersebut untuk membuka objek bernama.
Nota
Aplikasi Win32 dapat mengakses semua objek bernama yang dibuat oleh aplikasi paket asalkan mereka memenuhi syarat nama objek tersebut ketika membukanya. Mereka tidak perlu diberikan akses.
Mengakses objek yang diberi nama
Objek bernama dibuka dengan meneruskan nama ke API Open yang sesuai:
- Acara Terbuka
- OpenFileMapping
- OpenMutex
- OpenSemaphore
- OpenWaitableTimer
Objek bernama yang dibuat oleh aplikasi paket dibuat dalam namespace aplikasi, atau dikenal sebagai jalur objek bernama. Saat membuka objek bernama yang dibuat oleh aplikasi terkemas, nama objek harus diawali dengan jalur objek bernama dari aplikasi yang membuat.
GetAppContainerNamedObjectPath akan mengembalikan jalur objek bernama untuk aplikasi paket berdasarkan SID-nya. Anda dapat membuat SID untuk aplikasi yang dikemas dengan meneruskan nama keluarga paketnya ke DeriveAppContainerSidFromAppContainerName.
Nota
Nama keluarga paket dapat ditemukan melalui editor manifes paket di Visual Studio selama waktu pengembangan, melalui Pusat Mitra untuk aplikasi yang diterbitkan melalui Microsoft Store, atau melalui perintah Get-AppxPackage PowerShell untuk aplikasi yang sudah diinstal.
Saat membuka objek bernama yang dibuat oleh aplikasi paket, gunakan format <PATH>\<NAME>:
- Ganti
<PATH>dengan jalur objek yang diberi nama dari aplikasi yang membuat. - Ganti
<NAME>dengan nama objek.
Nota
Awalan nama objek dengan <PATH> hanya diperlukan jika aplikasi paket membuat objek. Objek bernama yang dibuat oleh aplikasi Win32 tidak perlu memenuhi kriteria, meskipun akses tetap harus diberikan ketika objek dibuat.
Komentar
Objek bernama dalam aplikasi paket diisolasi secara default untuk mempertahankan keamanan dan memastikan dukungan untuk peristiwa siklus hidup aplikasi seperti penangguhan dan penghentian. Berbagi objek bernama di seluruh aplikasi memperkenalkan batasan pengikatan dan penerapan versi yang ketat dan mengharuskan setiap aplikasi untuk tahan terhadap siklus hidup orang lain. Untuk alasan ini, disarankan untuk hanya berbagi objek bernama antar aplikasi dari penerbit yang sama.