Berbagi objek bernama
Topik ini menjelaskan cara berbagi objek bernama antara aplikasi Platform Windows Universal (UWP) dan aplikasi Win32.
Objek bernama dalam aplikasi paket
Objek bernama menyediakan cara mudah bagi proses untuk berbagi handel objek. Setelah proses membuat objek bernama, proses lain dapat menggunakan nama untuk memanggil fungsi yang sesuai untuk membuka handel ke objek. Objek bernama umumnya digunakan untuk sinkronisasi utas dan komunikasi antarproseksi.
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 yang Create
sesuai:
Semua API ini berbagi LPSECURITY_ATTRIBUTES
parameter 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.
Catatan
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 ACL objek bernama. Untuk berbagi objek bernama dengan aplikasi yang dikemas, buat struktur EXPLICIT_ACCESS untuk setiap aplikasi:
grfAccessMode = GRANT_ACCESS
grfAccessPermissions =
izin yang sesuai berdasarkan objek dan penggunaan yang dimaksudkangrfInheritance = NO_INHERITANCE
Trustee.TrusteeForm = TRUSTEE_IS_SID
Trustee.TrusteeType = TRUSTEE_IS_USER
Trustee.ptstrName =
SID yang diperoleh dari DeriveAppContainerSidFromAppContainerName
Dengan mengisi LPSECURITY_ATTRIBUTES
parameter dalam Create
panggilan dengan EXPLICIT_ACCESS
aturan untuk aplikasi paket, Anda dapat memberikan akses ke aplikasi tersebut untuk membuka objek bernama.
Catatan
Aplikasi Win32 dapat mengakses semua objek bernama yang dibuat oleh aplikasi paket selama mereka memenuhi syarat nama objek saat membukanya. Mereka tidak perlu diberikan akses.
Membuka objek bernama
Objek bernama dibuka dengan meneruskan nama ke API yang sesuai Open
:
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 paket, nama objek harus diawali dengan jalur objek bernama aplikasi pembuatan.
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.
Catatan
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 membuat jalur objek bernama aplikasi. - Ganti
<NAME>
dengan nama objek.
Catatan
Awalan nama objek dengan <PATH>
hanya diperlukan jika aplikasi paket membuat objek. Objek bernama yang dibuat oleh aplikasi Win32 tidak perlu memenuhi syarat, meskipun akses masih harus diberikan ketika objek dibuat.
Keterangan
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.