RpcSsContextLockShared (rpcasync.h)
Fungsi RpcSsContextLockShared memungkinkan aplikasi untuk mulai menggunakan handel konteks dalam mode bersama.
Sintaks
RPC_STATUS RpcSsContextLockShared(
[in] RPC_BINDING_HANDLE ServerBindingHandle,
[in] PVOID UserContext
);
Parameter
[in] ServerBindingHandle
Handel pengikatan pada server yang mewakili pengikatan ke klien. Server meniru klien yang ditunjukkan oleh handel ini. Jika nilai nol ditentukan, server meniru klien yang sedang dilayani oleh utas server ini.
[in] UserContext
Pointer diteruskan ke rutinitas manajer atau server oleh RPC. Lihat Keterangan untuk informasi selengkapnya.
Untuk handel konteks [out], fungsi RpcSsContextLockShared tidak melakukan operasi.
Nilai kembali
Mengembalikan RPC_S_OK setelah eksekusi berhasil, menunjukkan utas sekarang memiliki akses ke handel konteks dalam mode bersama.
Keterangan
Memodifikasi apakah handel konteks diserialisasikan atau tidak diserialisasikan dapat berguna untuk aplikasi yang menentukan apakah akan menutup handel konteks berdasarkan kondisi yang terdeteksi saat eksekusi. Untuk mengubah handel konteks dari nonserialisasi (bersama) menjadi serial (eksklusif), gunakan fungsi RpcSsContextLockExclusive .
Untuk parameter UserContext , jika rutinitas manajer menerima penunjuk ke handel konteks, itu harus meneruskan fungsi RpcSsContextLockShared penunjuk yang sama dengan yang diterimanya dari RPC. Jika rutinitas manajer menerima handel konteks itu sendiri, yang umumnya hanya untuk handel konteks [dalam], manajer harus meneruskan handel konteks itu sendiri ke fungsi RpcSsContextLockShared . Contoh kode berikut menunjukkan hal ini:
UseExclusive (..., /* [in] */ TestContextHandleExclusive *Ctx, ...)
{
...
// we decided that we're done changing the context handle exclusively
// and that we have extensive processing ahead - downgrade the exclusive
// lock to shared, and do the processing allowing other readers in
RpcSsContextLockShared (NULL, // use the explicit context
Ctx
);
...
}
Jika rutinitas manajer mengambil beberapa handel konteks [in, out] sebagai argumen, RPC memberi manajer rutin penunjuk ke handel konteks, bukan handel konteks itu sendiri. Penunjuk dijamin unik, dan karena itu meneruskannya ke fungsi RpcSsContextLockShared tidak ambigu. Namun, jika fungsi hanya mengambil beberapa handel konteks [in], RPC memberi manajer rutinitas handel konteks itu sendiri. Oleh karena itu, handel konteks mungkin tidak unik. Dalam hal ini, RPC menjalankan fungsi ini pada handel konteks pertama dengan nilai yang diberikan.
Metode tidak boleh mengubah handel konteks saat dalam mode bersama. Memanggil fungsi RpcSsContextLockShared tidak menghilangkan kunci penulis pada handel konteks yang ditentukan; ini memastikan handel konteks tidak akan diubah oleh utas lain.
Panggilan asinkron tidak boleh menggunakan fungsi RpcSsContextLockShared pada objek panggilan yang sama dari lebih dari satu utas sekaligus.
Fungsi RpcSsContextLockShared dapat gagal karena kondisi di luar memori, dan oleh karena itu server RPC harus siap untuk menangani kesalahan tersebut.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | rpcasync.h (termasuk Rpc.h) |
Pustaka | Rpcrt4.lib |
DLL | Rpcrt4.dll |