共用方式為


RPC_INTERFACE_TEMPLATEA 結構 (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_TEMPLATEA, *PRPC_INTERFACE_TEMPLATEA;

成員

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

套用至新增至本機 endpoint-map 資料庫之每個跨產品元素的字元字串批注指標。 字串長度上限為64個字元,包括 Null 終止符。 如果沒有批注字串,請指定 null 值或以 Null 結尾的字串 (“\0”) 。

註釋字串僅供應用程式用來取得資訊。 RPC 不會使用此字串來判斷客戶端與哪個伺服器實例通訊,或用於列舉端點對應資料庫中的專案。

SecurityDescriptor

選擇性的安全性描述項,描述哪些客戶端有權存取介面。

備註

若要註冊介面,伺服器會提供下列資訊:

  • 介面規格 介面規格是 MIDL 編譯程式所產生的數據結構。
  • 管理員類型 UUID 和管理員 EPV 管理員類型 UUID 和管理員 EPV 會決定伺服器從用戶端收到遠端過程調用要求時,執行哪一個管理員例程。 針對伺服器所提供之介面的每個實作,它必須註冊個別的管理員 EPV。 請注意,指定非 nil、管理員類型 UUID 時,伺服器也必須呼叫 RpcObjectSetType 來註冊這個非 nil 類型的物件。

所有介面群組介面都會被視為 自動接聽。 運行時間會在介面群組啟動后立即開始接聽呼叫。 對 RpcServerListenRpcMgmtStopServerListening 的呼叫不會影響介面,也不會呼叫 RpcServerUnregisterIf 並將 IfSpec 設定為 NULL

IfCallback 中指定安全性回呼函式可讓伺服器應用程式限制對個別用戶端介面的存取。 也就是說,根據預設,安全性是選擇性的;即使伺服器已呼叫 RpcServerRegisterAuthInfo,伺服器運行時間還是會分派不安全的呼叫。 如果伺服器只接受已驗證的用戶端,介面回呼函式必須呼叫 RpcBindingInqAuthClientRpcGetAuthorizationContextForClientRpcServerInqCallAttributes 來擷取安全性層級,或嘗試使用 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 運行時間可能會針對每個介面呼叫安全性回呼函式多次。 回呼函式必須能夠處理這種可能性。

注意

rpcdce.h 標頭會將RPC_INTERFACE_TEMPLATE定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 Windows 8 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2012 [僅限傳統型應用程式]
標頭 rpcdce.h (包含 Rpc.h)

另請參閱

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

RpcServerInqBindings

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate