Bagikan melalui


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:

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.