Bagikan melalui


Fungsi RpcSsContextLockExclusive (rpcasync.h)

Fungsi RpcSsContextLockExclusive memungkinkan aplikasi untuk mulai menggunakan handel konteks dalam mode eksklusif. Fungsi RpcSsContextLockExclusive memungkinkan metode yang dinyatakan sebagai nonserialisasi (bersama) dalam file IDL atau ACF diubah secara dinamis untuk mengakses handel konteks dalam mode serial (eksklusif).

Sintaks

RPC_STATUS RpcSsContextLockExclusive(
  [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 handel konteks out-only, fungsi RpcSsContextLockExclusive tidak melakukan operasi.

Mengembalikan nilai

Mengembalikan RPC_S_OK setelah eksekusi berhasil, menunjukkan utas sekarang memiliki akses ke handel konteks dalam mode eksklusif. Mengembalikan ERROR_MORE_WRITES saat beberapa utas mencoba kunci eksklusif pada handel konteks. Lihat Keterangan.

Catatan Untuk daftar kode kesalahan yang valid, lihat Nilai Pengembalian RPC.
 

Keterangan

Memodifikasi apakah handel konteks diserialisasikan atau tidak diserialisasi dapat berguna untuk aplikasi yang menentukan apakah akan menutup handel konteks berdasarkan kondisi yang terdeteksi setelah eksekusi. Untuk mengubah handel konteks dari serial (eksklusif) ke nonserialisasi (bersama), gunakan fungsi RpcSsContextLockShared .

Untuk parameter UserContext , jika manajer rutin menerima pointer ke handel konteks, itu harus melewati fungsi RpcSsContextLockExclusive pointer yang sama dengan yang diterimanya dari RPC. Jika rutinitas manajer menerima handel konteks itu sendiri, yang khas untuk [dalam] hanya handel konteks, manajer harus meneruskan handel konteks itu sendiri ke fungsi RpcSsContextLockExclusive . Contoh kode berikut menunjukkan hal ini:

void _UseShared(
    /* [in] */ handle_t Binding,
    //...
    /* [in] */ TestContextHandleShared *Ctx,
    //...
    )
{
    //...
    RpcStatus = RpcSsContextLockExclusive(Binding, 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. Pointer dijamin unik, dan oleh karena itu meneruskannya ke fungsi RpcSsContextLockExclusive 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 RpcSsContextLockExclusive tidak menghilangkan kunci pembaca pada handel konteks yang ditentukan; ini memastikan handel konteks yang tidak berubah untuk aplikasi yang tidak mengubah handel konteks dalam mode bersama. Jika dua utas mencoba untuk mendapatkan kunci eksklusif pada handel konteks yang sama dengan memanggil fungsi RpcSsContextLockExclusive pada saat yang sama, satu utas yang dipilih secara acak dikembalikan RPC_S_OK, dan yang lainnya dikembalikan ERROR_MORE_WRITES. Utas yang dikembalikan ERROR_MORE_WRITES menerima kunci eksklusif, tetapi kunci pembacanya pada handel konteks hilang saat dikembalikan. Penelepon yang menerima ERROR_MORE_WRITES tidak boleh mengasumsikan apa pun tentang handel konteks saat mengembalikan fungsi RpcSsContextLockExclusive , karena mungkin telah dihancurkan.

Panggilan asinkron tidak boleh menggunakan fungsi RpcSsContextLockExclusive pada objek panggilan yang sama dari lebih dari satu utas sekaligus.

Fungsi RpcSsContextLockExclusive 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

Lihat juga

RpcSsContextLockShared

context_handle

context_handle_noserialize

context_handle_serialize