WSCSetProviderInfo 函式 (ws2spi.h)

**注意** 分層服務提供者已被取代。 從 Windows 8 和 Windows Server 2012 開始,請使用 Windows 篩選平台
 
**WSCSetProviderInfo** 函式會為分層服務提供者的指定資訊類別設定資料值, (LSP) 。

語法

int WSCSetProviderInfo(
  [in]  LPGUID                 lpProviderId,
  [in]  WSC_PROVIDER_INFO_TYPE InfoType,
  [in]  PBYTE                  Info,
  [in]  size_t                 InfoSize,
  [in]  DWORD                  Flags,
  [out] LPINT                  lpErrno
);

參數

[in] lpProviderId

提供者的全域唯一識別碼指標 (GUID) 。

[in] InfoType

要為此 LSP 通訊協定專案設定的資訊類別。

[in] Info

緩衝區的指標,其中包含要為 LSP 通訊協定專案設定的資訊類別資料。

[in] InfoSize

Info參數所指向緩衝區的大小,以位元組為單位。

[in] Flags

用來修改 WSCSetProviderInfo 函式呼叫行為的旗標。

[out] lpErrno

如果函式失敗,則為錯誤碼的指標。

傳回值

如果沒有發生錯誤, WSCSetProviderInfo 會傳回 ERROR_SUCCESS (零) 。 否則,它會 傳回SOCKET_ERROR,並在 lpErrno 參數中傳回特定的錯誤碼。

錯誤碼 意義
ERROR_CALL_NOT_IMPLEMENTED
未實作呼叫。 如果在 InfoType 參數中指定 **ProviderInfoAudit**,就會傳回此錯誤。
WSAEFAULT
一或多個引數不在使用者位址空間的有效部分中。
WSAEINVAL
一或多個引數無效。
WSANO_RECOVERY
發生無法復原的錯誤。 此錯誤會在數個情況下傳回,包括下列情況:使用者缺少寫入 Winsock 登錄所需的系統管理許可權,或開啟 Winsock 目錄專案時發生失敗。
WSA_NOT_ENOUGH_MEMORY
記憶體不足。 當記憶體不足而無法配置新的目錄專案時,就會傳回此錯誤。

備註

WSCSetProviderInfo 可用來設定分層服務提供者的資訊類別資料。 當 InfoType 參數設定為 ProviderInfoLspCategories時,在成功 時 WSCSetProviderInfo 會根據 Info 參數中傳遞的值,設定提供者所實作的適當 LSP 類別旗標。

Winsock 2 可容納分層通訊協定。 分層通訊協定是只實作較高層級通訊功能的通訊功能,同時依賴基礎傳輸堆疊來與遠端端點實際交換資料。 分層通訊協定或分層服務提供者的範例是一個安全性層,可將通訊協定新增至連線建立程式,以執行驗證,並建立相互同意的加密配置。 這類安全性通訊協定通常需要基礎可靠傳輸通訊協定的服務,例如 TCP 或 SPX。 基底通訊協定一詞是指通訊協定,例如 TCP 或 SPX,其能夠與遠端端點執行資料通訊。 分層通訊協定一詞是用來描述無法獨立通訊協定的通訊協定。 接著,通訊協定鏈結會定義為一或多個分層通訊協定,並依基底通訊協定錨定。 基底通訊協定的 ChainLen 成員 WSAPROTOCOL_INFO 結構設定為 BASE_PROTOCOL 定義為 1。 分層通訊協定的 ChainLen 成員 WSAPROTOCOL_INFO 結構設定為 LAYERED_PROTOCOL 定義為零。 通訊協定鏈結將WSAPROTOCOL_INFO結構的ChainLen成員設定為大於 1。

在 LSP 初始化期間,LSP 必須提供數個 Winsock SPI 函式的指標。 這些函式會在正常處理期間由 LSP 正上方的圖層呼叫, (另一個 LSP 或 Ws2_32.dll) 。

實作可安裝檔案系統的 LSP (IFS) 可以選擇性地選擇提供本身實作之函式的指標,或將圖層所提供的指標傳回 LSP 正下方。 非 IFS LSP,因為它們提供自己的控制碼,所以必須實作所有的 Winsock SPI 函式。 這是因為每個 SPI 都需要 LSP 將它建立的所有通訊端控制碼對應到較低提供者的通訊端控制碼, (另一個 LSP 或基底通訊協定) 。

不過,所有 LSP 只會對 Winsock SPI 函式的子集執行額外的處理,以執行其特定工作。

根據 LSP 實作的 SPI 函式子集,以及針對每個函式執行的額外處理本質,可以定義 LSP 類別。

藉由分類 LSP,以及分類使用 Winsock 通訊端的應用程式,可以選擇性地判斷 LSP 是否應該在執行時間參與指定的進程。

在 Windows Vista 和更新版本上,LSP 可以根據它如何與 Windows Sockets 呼叫和資料互動來分類。 LSP 類別是 Winsock SPI 函式子集上可識別的行為群組。 例如,HTTP 內容篩選會分類為數據偵測器 , (LSP_INSPECTOR 類別) 。 LSP_INSPECTOR類別會檢查資料傳輸 SPI 函式的參數,但不會改變。 應用程式可以查詢 LSP 的類別,並選擇不要根據 LSP 類別和應用程式允許的 LSP 類別集載入 LSP。

下表列出可分類 LSP 的類別。

LSP 類別 描述
**LSP_CRYPTO_COMPRESS** LSP 是密碼編譯或資料壓縮提供者。
**LSP_FIREWALL** LSP 是防火牆提供者。
**LSP_LOCAL_CACHE** LSP 是本機快取提供者。
**LSP_INBOUND_MODIFY** LSP 會修改輸入資料。
**LSP_INSPECTOR** LSP 會檢查或篩選資料。
**LSP_OUTBOUND_MODIFY** LSP 會修改輸出資料。
**LSP_PROXY** LSP 可作為 Proxy 並重新導向封包。
**LSP_REDIRECTOR** LSP 是網路重新導向器。
**LSP_SYSTEM** LSP 可接受在服務和系統進程中使用。
  LSP 可能屬於多個類別。 例如,防火牆/安全性 LSP 可能同時屬於偵測器 (**LSP_INSPECTOR**) 和防火牆 (**LSP_FIREWALL**) 類別。

如果 LSP 未設定類別目錄,則會被視為在 [所有其他] 類別中。 此 LSP 類別不會載入服務或系統進程 (例如 lsass、winlogon 和許多 svchost 進程) 。

WSCSetProviderInfo函式只能由以 Administrators 群組成員身分登入的使用者呼叫。 如果WSCSetProviderInfo是由不是 Administrators 群組成員的使用者呼叫,則函式呼叫將會失敗,並在lpErrno參數中傳回WSANO_RECOVERY。 此函式也可能因為使用者帳戶控制 (UAC) 而失敗。 如果包含此函式的應用程式是由以內建系統管理員以外的 Administrators 群組成員身分登入的使用者所執行,除非應用程式已在資訊清單檔案中標示 為 requestedExecutionLevel 設定為 requireAdministrator,否則此呼叫將會失敗。 如果 Windows Vista 或 Windows Server 2008 上的應用程式缺少此資訊清單檔案,則以系統管理員群組成員身分登入的使用者,而不是內建系統管理員,則必須在增強殼層中執行應用程式,因為內建的 Administrator (RunAs 系統管理員) ,此函式才能成功。

**注意** TDI 功能已被取代,將在未來的 Microsoft Windows 版本中移除。 視您使用 TDI 的方式而定,請使用 Winsock 核心 (WSK) 或 Windows 篩選平台 () 。 如需有關其與 WSK 的詳細資訊,請參閱 Windows 篩選平台Winsock 核心。 如需有關 WSK 和 TDI 的 Windows Core 網路部落格文章,請參閱 Winsock 核心 (WSK) 簡介
 

規格需求

   
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 ws2spi.h
程式庫 Ws2_32.lib
Dll Ws2_32.dll

另請參閱

將分層服務提供者和應用程式分類WSAPROTOCOL_INFOWSCGetApplicationCategoryWSCGetProviderInfoWSCSetApplicationCategoryWSC_PROVIDER_INFO_TYPE