WSCGetApplicationCategory 函式 (ws2spi.h)

**注意** 分層服務提供者已被取代。 從 Windows 8 和 Windows Server 2012 開始,請使用 Windows 篩選平臺
 
**WSCGetApplicationCategory** 函式會擷取與應用程式相關聯的分層服務提供者 (LSP) 類別。

語法

int WSCGetApplicationCategory(
  [in]  LPCWSTR Path,
  [in]  DWORD   PathLength,
  [in]  LPCWSTR Extra,
  [in]  DWORD   ExtraLength,
  [out] DWORD   *pPermittedLspCategories,
  [out] LPINT   lpErrno
);

參數

[in] Path

Unicode 字串的指標,其中包含應用程式可執行檔映像的載入路徑。 此字串會觀察路徑解析的一般規則,而且可以包含內嵌的環境字串 (,例如 %SystemRoot%) 。

[in] PathLength

Path 參數的長度,以字元為單位。 這個長度不包含終止 NULL

[in] Extra

Unicode 字串的指標,代表啟動 Path 參數中指定的應用程式時所使用的命令行自變數。 當以一致的命令行啟動時, Extra 參數可用來區分應用程式的多個不同實例。 這是為了支援不同 Svchost.exe 或 Rundll32.exe 實例的不同應用程式分類。 如果只需要 Path 參數,而且不需要任何命令行自變數,才能進一步區分應用程式的實例,則 Extra 參數應該設定為 NULL

[in] ExtraLength

Extra 參數的長度,以字元為單位。 這個長度不包含終止 NULL

[out] pPermittedLspCategories

允許之 LSP 類別之 DWORD 值的指標,此類別允許此應用程式的所有實例。 應用程式是由 PathExtra 參數的值組合來識別。

[out] lpErrno

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

傳回值

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

錯誤碼 意義
WSAEFAULT
一或多個自變數不在用戶位址空間的有效部分。
WSAEINVAL
一或多個引數無效。
WSASERVICE_NOT_FOUND
無法根據 PathExtra 參數找到服務。

如果您查詢的應用程式不存在於登錄中,也可以傳回錯誤。 在此情況下,此錯誤表示應用程式目前未分類。

WSANO_RECOVERY
發生無法復原的錯誤。 此錯誤會在數個情況下傳回:使用者缺少存取 Winsock 登錄所需的系統管理許可權,或開啟 Winsock 目錄專案或應用程式識別符專案時發生失敗。

備註

WSCGetApplicationCategory 可用來擷取與應用程式實例相關聯的 LSP 類別旗標。 應用程式可以判斷應用程式內容中可接受的 LSP 行為。 因此,藉由指定允許的 LSP 類別,應用程式只能允許實作可接受行為的分層服務提供者載入。

當命令行用來區分裝載於相同可執行檔內之應用程式或服務的不同實例時,需要 Extra 參數。 每個實例都可以有不同的應用程式分類需求。 Svchost.exe 和 Rundll32.exe 是兩個範例,其中需要命令行才能區分不同的進程實例。 針對 SvcHost.exe, -k <svcinstance> 參數會定義進程實例。

對於服務,使用服務名稱不夠,因為 Winsock Catalog 是指定進程的全域,而且進程可能會裝載數個服務。

視窗套接字會決定應用程式的身分識別,並在第一次呼叫 WSAStartup 期間擷取允許的 LSP 類別。 這會是應用程式實例期間允許的 LSP 類別集。 在應用程式下一個實例之前,將不會挑選給定應用程式身分識別的允許 LSP 類別後續變更。 允許的 LSP 類別在應用程式實例的存留期內不可變動。

Winsock 2 可容納分層通訊協定。 分層通訊協定是只實作較高層級通訊函式的通訊協定,同時依賴基礎傳輸堆疊來與遠端端點實際交換數據。 分層通訊協定或分層服務提供者的範例是一個安全性層,可將通訊協定新增至連線建立程式,以執行驗證,並建立相互同意的加密配置。 這類安全性通訊協定通常需要基礎可靠傳輸通訊協議的服務,例如 TCP 或 SPX。 基底通訊協定一詞是指 TCP 或 SPX 等通訊協定,其能夠與遠端端點執行數據通訊。 分層通訊協定一詞是用來描述無法獨立通訊協定的通訊協定。

在 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 進程) 。

規格需求

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

另請參閱

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

WSAStartup

WSCGetProviderInfo

WSCGetProviderInfo32

WSCSetApplicationCategory

WSCSetProviderInfo

WSCSetProviderInfo32