rpcSsContextLockShared 函式 (rpcasync.h)
RpcSsContextLockShared 函式可讓應用程式開始在共用模式中使用內容句柄。
語法
RPC_STATUS RpcSsContextLockShared(
[in] RPC_BINDING_HANDLE ServerBindingHandle,
[in] PVOID UserContext
);
參數
[in] ServerBindingHandle
表示系結至用戶端之伺服器上的系結句柄。 伺服器會模擬這個句柄所指示的用戶端。 如果指定了零的值,伺服器就會模擬此伺服器線程所服務的用戶端。
[in] UserContext
由 RPC 傳遞至管理員或伺服器例程的指標。 如需詳細資訊,請參閱「備註」。
若為 [out] 只有內容句柄, RpcSsContextLockShared 函式不會執行任何作業。
傳回值
在成功執行時傳回RPC_S_OK,表示線程現在可存取共用模式中的內容句柄。
備註
修改內容句柄是串行化還是非串行化,對於判斷是否要根據執行時偵測到的條件關閉內容句柄的應用程式很有用。 若要將內容句柄從非串行化 (共用) 變更為串行化 (獨佔) ,請使用 RpcSsContextLockExclusive 函式。
針對 UserContext 參數,如果管理員例程收到內容句柄的指標,它就必須將 RpcSsContextLockShared 函式傳遞給它從 RPC 收到的相同指標。 如果管理員例程收到內容句柄本身,這通常僅適用於 [in] 內容句柄,則必須將內容句柄本身傳遞給 RpcSsContextLockShared 函式 。 下列程式代碼範例將示範下列情況:
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
);
...
}
如果管理員例程採用多個 [in, out] 內容句柄做為自變數,RPC 會為管理員提供內容句柄的指標,而不是內容句柄本身。 指標保證是唯一的,因此將它傳遞至 RpcSsContextLockShared 函 式並不明確。 不過,如果函式只接受多個 [in] 內容句柄,RPC 會提供管理員例程內容句柄本身。 因此,內容句柄可能不是唯一的。 在此情況下,RPC 會在具有指定值的第一個內容句柄上執行此函式。
在共用模式中,方法不應該修改內容句柄。 呼叫 RpcSsContextLockShared 函式並不會排除指定之內容句柄上的寫入器鎖定;這可確保內容句柄不會由另一個線程變更。
異步呼叫不能一次在同一個呼叫物件上使用 RpcSsContextLockShared 函式。
RpcSsContextLockShared 函式可能會因為記憶體不足的情況而失敗,因此 RPC 伺服器必須準備好處理這類錯誤。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | rpcasync.h (包含 Rpc.h) |
程式庫 | Rpcrt4.lib |
Dll | Rpcrt4.dll |