RpcServerRegisterIfEx 函式 (rpcdce.h)
RpcServerRegisterIfEx 函式會向 RPC 運行時間連結庫註冊介面。
語法
RPC_STATUS RpcServerRegisterIfEx(
RPC_IF_HANDLE IfSpec,
UUID *MgrTypeUuid,
RPC_MGR_EPV *MgrEpv,
unsigned int Flags,
unsigned int MaxCalls,
RPC_IF_CALLBACK_FN *IfCallback
);
參數
IfSpec
MIDL 產生的結構,指出要註冊的介面。
MgrTypeUuid
要與 MgrEpv 參數建立關聯的 UUID 類型指標。 指定 null 參數值 (或 nil UUID) 向 nil 類型 UUID 註冊 IfSpec 。
MgrEpv
管理員例程的進入點向量 (EPV) 。 若要使用 MIDL 產生的預設 EPV,請指定 Null 值。 如需詳細資訊,請參閱 RPC_MGR_EPV。
Flags
標誌。 如需旗標值的清單,請參閱 介面註冊旗標。
MaxCalls
伺服器可以在自動接聽介面上接受的並行遠端過程調用要求數目上限。 MaxCalls 參數僅適用於自動接聽介面,而且不會在非自動接聽的介面上忽略。 RPC 執行時間連結庫會盡最大努力確保伺服器不允許比 MaxCalls 中指定的呼叫數目更多的並行呼叫要求。 實際數目可以更大,而且每個通訊協定序列可能會有所不同。
其他介面上的呼叫是由 RpcServerListen 函式呼叫中指定的全進程 MaxCalls 參數值所控管。
如果並行呼叫數目不相關,您可以使用 RPC_C_LISTEN_MAX_CALLS_DEFAULT來指定預設值,以達到稍微更好的伺服器端效能。 這麼做可減輕 RPC 運行時間環境強制執行不必要的限制。
IfCallback
無回呼的安全性回呼函式或 NULL 。 每個已註冊的介面都可以有不同的回呼函式。 如需詳細資訊,請參閱。
傳回值
成功時傳回RPC_S_OK。
備註
RpcServerRegisterIfEx 的參數和效果會減去 RpcServerRegisterIf 的參數和效果。 差異在於註冊自動接聽介面和指定安全性回呼函式的能力。
伺服器應用程式程式代碼會呼叫 RpcServerRegisterIfEx 來註冊介面。 若要註冊介面,伺服器會提供下列資訊:
- 介面規格
介面規格是 MIDL 編譯程式所產生的數據結構。
- 管理員類型 UUID 和管理員 EPV
管理員類型 UUID 和管理員 EPV 會決定當伺服器收到來自用戶端的遠端過程調用要求時,執行哪一個管理員例程。 針對伺服器所提供之介面的每個實作,它必須註冊個別的管理員 EPV。
請注意,指定非 nil、管理員類型 UUID 時,伺服器也必須呼叫 RpcObjectSetType 來註冊這個非 nil 類型的物件。
指定安全性回呼函式可讓伺服器應用程式限制每個客戶端對接口的存取。 請記住,根據預設,安全性是選擇性的;即使伺服器已呼叫 RpcServerRegisterAuthInfo,伺服器運行時間還是會分派不安全的呼叫。 如果伺服器只接受已驗證的用戶端,介面回呼函式必須呼叫 RpcBindingInqAuthClient 或 RpcGetAuthorizationContextForClient 函式來擷取安全性層級,或嘗試使用 RpcImpersonateClient 模擬用戶端。 它也可以在介面旗標中指定RPC_IF_ALLOW_SECURE_ONLY旗標。
當伺服器應用程式為其介面指定安全性回呼函式 () 時,RPC 運行時間會自動拒絕該介面未經驗證的呼叫。 此外,運行時間會記錄每個用戶端已使用的介面。 當用戶端對目前通訊會話期間未使用的介面進行 RPC 時,RPC 運行時間連結庫會呼叫介面的安全性回呼函式。 指定RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH旗標可防止自動拒絕未經驗證的用戶端。
如需回呼函式的簽章,請參閱 RPC_IF_CALLBACK_FN。
如果允許用戶端在此介面中呼叫方法,則回呼函式應該會傳回RPC_S_OK。 任何其他傳回碼都會造成用戶端收到例外狀況RPC_S_ACCESS_DENIED。
在某些情況下,RPC 運行時間可能會針對每個用戶端的每個介面多次呼叫安全性回呼函式。 請確定您的回呼函式可以處理這種可能性。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | rpcdce.h (包含 Rpc.h) |
程式庫 | Rpcrt4.lib |
Dll | Rpcrt4.dll |