RPC_INTERFACE_TEMPLATEW結構 (rpcdce.h)
RPC_INTERFACE_TEMPLATE 結構會定義 RPC 介面群組伺服器介面。
語法
typedef struct {
unsigned long Version;
RPC_IF_HANDLE IfSpec;
UUID *MgrTypeUuid;
RPC_MGR_EPV *MgrEpv;
unsigned int Flags;
unsigned int MaxCalls;
unsigned int MaxRpcSize;
RPC_IF_CALLBACK_FN *IfCallback;
UUID_VECTOR *UuidVector;
RPC_WSTR Annotation;
void *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATEW, *PRPC_INTERFACE_TEMPLATEW;
成員
Version
此欄位是保留的,且必須設定為 0。
IfSpec
MIDL 產生的結構,定義要註冊的介面。
MgrTypeUuid
與 MgrEpv建立關聯的 UUID 指標。 NULL 或 nil UUID 會 向 nil UUID註冊 ifSpec。
MgrEpv
包含管理員例程進入點向量 (EPV) 之 RPC_MGR_EPV 結構的指標。 如果 NULL,則會使用 MIDL 產生的預設 EPV。
Flags
標誌。 如需旗標值的清單,請參閱
MaxCalls
伺服器在此介面上可接受的並行遠程過程調用要求數目上限。 RPC 執行時間連結庫會盡最大努力確保伺服器不允許比 maxCalls
其他介面上的呼叫會受到在 rpcServerListen
如果並行呼叫數目不相關,則可以使用 RPC_C_LISTEN_MAX_CALLS_DEFAULT來指定預設值,以達到稍微更好的伺服器端效能。 這麼做可免除 RPC 運行時間環境強制執行不必要的限制。
MaxRpcSize
傳入數據區塊的大小上限,以位元組為單位。 MaxRpcSize 可用來協助防止惡意阻斷服務攻擊。 如果遠端過程調用的數據區塊大於 MaxRpcSize,RPC 運行時間連結庫會拒絕呼叫,並將 RPC_S_ACCESS_DENIED 錯誤傳送給用戶端。 MaxRpcSize 中指定值 (unsigned int) –1, 會移除傳入數據區塊大小的限制。 此參數不會影響透過 ncalrpc 通訊協議進行的呼叫。
IfCallback
RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN 安全性回呼函式的指標,或無回呼 NULL。 每個已註冊的介面都可以有不同的回呼函式。
UuidVector
要向 RPC 端點對應程式註冊之伺服器所提供的物件向量 UUID 的指標。 伺服器應用程式會建構此向量。 NULL 表示沒有物件 UUID 註冊。
Annotation
套用至新增至本機端點對應資料庫之每個跨產品專案之字元字串批註的指標。 字串長度最多可達 64 個字元,包括 Null 終止字元。 如果沒有註釋字串,請指定 Null 值或以 Null 結尾的字串 (“\0”)。
批註字串僅供應用程式用來取得資訊。 RPC 不會使用此字串來判斷客戶端與哪個伺服器實例通訊,或用於列舉端點對應資料庫中的元素。
SecurityDescriptor
選擇性的安全性描述項,描述哪些客戶端有權存取介面。
言論
若要註冊介面,伺服器會提供下列資訊:
- 介面規格 介面規格:介面規格是 MIDL 編譯程式產生的數據結構。
- 管理員類型 UUID 和管理員 EPV 管理員類型 UUID,而管理員 EPV 會決定當伺服器收到來自用戶端的遠端過程調用要求時,執行哪一個管理員例程。 針對伺服器所提供之介面的每個實作,它必須註冊個別的管理員 EPV。 請注意,指定非 nil 時,管理員類型 UUID時,伺服器也必須呼叫 RpcObjectSetType 來註冊這個非 nil 類型的物件。
所有介面群組介面都會被視為自動接聽 。 運行時間會在介面群組啟動后立即開始接聽呼叫。 呼叫 RpcServerListen 和 RpcMgmtStopServerListening 不會影響介面,也不會呼叫 RpcServerUnregisterIf,並將 IfSpec 設為 NULL。
在 IfCallback 中指定安全性回呼函式,可讓伺服器應用程式限制個別用戶端對其介面的存取。 根據預設,安全性是選擇性的;即使伺服器已呼叫 rpcServerRegisterAuthInfo ,伺服器運行時間仍會分派不安全的呼叫。 如果伺服器只接受已驗證的用戶端,介面回呼函式必須呼叫 RpcBindingInqAuthClient、RpcGetAuthorizationContextForClient或 RpcServerInqCallAttributes 來擷取安全性層級,或嘗試 使用 rpcImpersonateClient仿真用戶端。 它也可以在 Flags 中指定 RPC_IF_ALLOW_SECURE_ONLY 旗標,以拒絕未經驗證的呼叫。
當伺服器應用程式在 IfCallback中為其介面指定安全性回呼函式時,RPC 運行時間會自動拒絕呼叫,而不需要該介面的驗證資訊。 此外,運行時間會記錄每個用戶端所使用的介面。 當用戶端對目前通訊會話期間未使用的介面進行 RPC 時,RPC 運行時間連結庫會呼叫介面的安全性回呼函式。 在 旗標 中指定 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH,可防止自動拒絕未經驗證的用戶端。 請注意,即使這些呼叫來自匿名用戶端,NULL 安全性會話的呼叫還是可以有驗證資訊。 因此,單獨存在回呼不足以防止匿名用戶端連線:安全性回呼函式必須檢查該函式,或是必須使用RPC_IF_ALLOW_SECURE_ONLY旗標。 RPC_IF_ALLOW_SECURE_ONLY只會在 Windows XP 和更新版本的 Windows 上拒絕 Null 會話呼叫。
如需回呼函式的簽章,請參閱 RPC_IF_CALLBACK_FN。
如果允許用戶端在此介面中呼叫方法,IfCallback 中的回呼函式應該會傳回 RPC_S_OK。 任何其他傳回碼都會導致用戶端收到例外狀況 RPC_S_ACCESS_DENIED。
在某些情況下,RPC 運行時間可能會針對每個介面的每個用戶端多次呼叫安全性回呼函式。 回呼函式必須能夠處理這種可能性。
注意
rpcdce.h 標頭會將RPC_INTERFACE_TEMPLATE定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 8 [僅限傳統型應用程式] |
支援的最低伺服器 | Windows Server 2012 [僅限傳統型應用程式] |
標頭 | rpcdce.h (包括 Rpc.h) |
另請參閱
RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN