WSCSetProviderInfo32 函式 (ws2spi.h)
語法
int WSCSetProviderInfo32(
[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
用來修改 WSCSetProviderInfo32 函數調用行為的旗標。
[out] lpErrno
如果函式失敗,則為錯誤碼的指標。
傳回值
如果沒有發生錯誤, WSCSetProviderInfo32 會傳回 ERROR_SUCCESS (零) 。 否則,它會傳回 SOCKET_ERROR,並在 lpErrno 參數中傳回特定的錯誤碼。
錯誤碼 | 意義 |
---|---|
|
不會實作呼叫。 如果在 InfoType 參數中指定 **ProviderInfoAudit**,就會傳回此錯誤。 |
一或多個自變數不在用戶位址空間的有效部分。 | |
一或多個引數無效。 | |
發生無法復原的錯誤。 此錯誤會在數個情況下傳回:使用者缺少寫入 Winsock 登錄所需的系統管理許可權,或開啟 Winsock 目錄項目時發生失敗。 | |
記憶體不足。 當記憶體不足而無法配置新的目錄專案時,就會傳回此錯誤。 |
備註
WSCSetProviderInfo32 是嚴格 32 位版本的 WSCSetProviderInfo。 在 64 位電腦上,所有呼叫並非特別 32 位 (,例如,不會以 “32 ) ” 結尾的所有函式都會在原生 64 位目錄上運作。 在 64 位電腦上執行的處理程式必須使用特定的 32 位函式呼叫,以在嚴格 32 位目錄上運作,並保留相容性。 特定32位呼叫的定義和語意與其原生對應專案相同。
WSCSetProviderInfo32 是用來設定 32 位分層服務提供者的資訊類別數據。 當 InfoType 參數設定為 ProviderInfoLspCategories 時,成功 WSCSetProviderInfo32 會根據 Info 參數中傳遞的值,設定提供者所實作的適當 LSP 類別旗標。
Winsock 2 可容納分層通訊協定。 分層通訊協定是只實作較高層級通訊函式的通訊協定,同時依賴基礎傳輸堆疊來與遠端端點實際交換數據。 分層通訊協定或分層服務提供者的範例是一個安全性層,可將通訊協定新增至連線建立程式,以執行驗證,並建立相互同意的加密配置。 這類安全性通訊協定通常需要基礎可靠傳輸通訊協議的服務,例如 TCP 或 SPX。 基底通訊協定一詞是指 TCP 或 SPX 等通訊協定,其能夠與遠端端點執行數據通訊。 分層通訊協定一詞是用來描述無法獨立通訊協定的通訊協定。 接著,通訊協定鏈結會定義為一或多個分層通訊協定,並依基底通訊協定錨定。 基底通訊協定的 ChainLen 成員 WSAProtocol_Info結構設定 為 1 BASE_PROTOCOL 。 分層通訊協定的 ChainLen 成員 WSAPROTOCOL_INFO結構設定 為 LAYERED_PROTOCOL ,定義為零。 通訊協議鏈結的 ChainLen 成員 WSAPROTOCOL_INFO結構設定 為大於 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 類別 | Description |
---|---|
**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 進程) 。
只有以 Administrators 群組成員身分登入的使用者,才能呼叫 WSCSetProviderInfo32 函式。 如果 WSCSetProviderInfo32 是由不是 Administrators 群組成員的使用者呼叫,則函式呼叫將會失敗,並在 lpErrno 參數中傳回WSANO_RECOVERY。 此函式也可能因為用戶帳戶控制 (UAC) 而失敗。 如果包含此函式的應用程式是由使用者以系統管理員以外的系統管理員群組成員身分登入來執行,除非應用程式已在指令清單檔中標示為 requestedExecutionLevel 設定為 requireAdministrator,否則此呼叫將會失敗。 如果 Windows Vista 或 Windows Server 2008 上的應用程式缺少此指令清單檔案,則使用者以系統管理員以外的系統管理員群組成員身分登入,則必須在增強的殼層中執行應用程式,因為內建系統管理員 (RunAs 系統管理員) ,此函式才能成功。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | ws2spi.h |
程式庫 | Ws2_32.lib |
Dll | Ws2_32.dll |