RPC_INTERFACE_TEMPLATE結構 (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_CSTR Annotation;
void *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATE, *PRPC_INTERFACE_TEMPLATE;
成員
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 中指定的呼叫數目更多的並行呼叫要求。 不過,實際數位可以大於 MaxCalls ,而且每個通訊協定序列可能會有所不同。
其他介面上的呼叫是由 RpcServerListen 中指定的全進程 MaxCalls 參數值所控管。
如果並行呼叫數目不是問題,則可以使用 RPC_C_LISTEN_MAX_CALLS_DEFAULT 來指定預設值,以達到稍微更好的伺服器端效能。 這樣做可減輕 RPC 運行時間環境強制執行不必要的限制。
MaxRpcSize
傳入數據區塊的大小上限,以位元組為單位。 MaxRpcSize 可用來協助防止惡意阻斷服務攻擊。 如果遠端過程調用的數據區塊大於 MaxRpcSize,RPC 運行時間連結庫會拒絕呼叫,並將 RPC_S_ACCESS_DENIED 錯誤傳送至用戶端。 在 MaxRpcSize 中指定不帶正負號的 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 運行時間連結庫會呼叫介面的安全性回呼函式。 在 Flags 中指定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 運行時間可能會針對每個介面呼叫每個用戶端多次的安全性回呼函式。 回呼函式必須能夠處理這種可能性。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2012 [僅限傳統型應用程式] |
標頭 | rpcdce.h (包含 Rpc.h) |
另請參閱
RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN