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

Path パラメーターで指定されたアプリケーションを起動するときに使用されるコマンド ライン引数を表す Unicode 文字列へのポインター。 Extra パラメーターは、一貫性のあるコマンド ラインを使用して起動するときに、アプリケーションの複数の個別のインスタンスを区別するために使用されます。 これは、Svchost.exe または Rundll32.exe のインスタンスごとに異なるアプリケーション分類をサポートするためです。 Path パラメーターのみが必要で、アプリケーションのインスタンスをさらに区別するためにコマンド ライン引数が必要ない場合は、Extra パラメーターを NULL に設定する必要があります。

[in] ExtraLength

Extra パラメーターの長さ (文字数)。 この長さには、終端の NULL は含まれません。

[out] pPermittedLspCategories

このアプリケーションのすべてのインスタンスで許可される、許可されている LSP カテゴリの DWORD 値へのポインター。 アプリケーションは、 Path パラメーターと Extra パラメーターの値の組み合わせによって識別されます。

[out] lpErrno

関数が失敗した場合のエラー コードへのポインター。

戻り値

エラーが発生しない場合、 WSCGetApplicationCategoryERROR_SUCCESS (ゼロ) を返します。 それ以外の場合は 、SOCKET_ERRORを返し、 lpErrno パラメーターに特定のエラー コードが返されます。

エラー コード 意味
WSAEFAULT
1 つ以上の引数が、ユーザー・アドレス・スペースの有効な部分にありません。
WSAEINVAL
1 つ以上の引数が無効です。
WSASERVICE_NOT_FOUND
Path パラメーターと Extra パラメーターに基づいてサービスが見つかりませんでした。

クエリを実行しているアプリケーションがレジストリに存在しない場合も、エラーが返される可能性があります。 この場合、エラーは、アプリケーションが現在分類されていないことを示します。

WSANO_RECOVERY
回復不可能なエラーが発生しました。 このエラーは、ユーザーが Winsock レジストリにアクセスするために必要な管理特権がない、または Winsock カタログ エントリまたはアプリケーション ID エントリを開くときにエラーが発生したなど、いくつかの条件で返されます。

注釈

WSCGetApplicationCategory は、アプリケーション インスタンスに関連付けられている LSP カテゴリ フラグを取得するために使用されます。 アプリケーションは、アプリケーションのコンテキスト内で許容できる LSP 動作を決定できます。 したがって、許可される LSP カテゴリを指定することで、アプリケーションでは、許容可能な動作を実装する階層化されたサービス プロバイダーのみを読み込むことができます。

同じ実行可能ファイル内でホストされているアプリケーションまたはサービスの異なるインスタンスを区別するためにコマンド ラインを使用する場合は 、Extra パラメーターが必要です。 各インスタンスには、アプリケーションの分類のニーズが異なる場合があります。 Svchost.exe と Rundll32.exe は、異なるプロセス インスタンスを区別するためにコマンド ラインが必要な 2 つの例です。 SvcHost.exe の場合、 -k <svcinstance> スイッチによってプロセス インスタンスが定義されます。

サービスの場合、Winsock Catalog は特定のプロセスに対してグローバルであり、プロセスで複数のサービスをホストする可能性があるため、サービス名を使用するだけでは十分ではありません。

ウィンドウ ソケットは、アプリケーションの ID を決定し、 WSAStartup の最初の呼び出し中に許可された LSP カテゴリを取得します。 これは、アプリケーション インスタンスの期間中に許可される LSP カテゴリのセットです。 特定のアプリケーション ID に対して許可されている LSP カテゴリに対する後続の変更は、アプリケーションの次のインスタンスまで取得されません。 許可されている LSP カテゴリは、アプリケーション インスタンスの有効期間中は変更できません。

Winsock 2 は、階層化されたプロトコルに対応しています。 階層型プロトコルは、より高いレベルの通信機能のみを実装するプロトコルであり、リモート エンドポイントとのデータの実際の交換には基になるトランスポート スタックに依存します。 レイヤー化されたプロトコルまたは階層化されたサービス プロバイダーの例としては、認証を実行し、相互に合意された暗号化スキームを確立するために、接続確立プロセスにプロトコルを追加するセキュリティ層があります。 このようなセキュリティ プロトコルでは、一般に、TCP や SPX などの基になる信頼性の高いトランスポート プロトコルのサービスが必要になります。 基本プロトコルという用語は、リモート エンドポイントとのデータ通信を実行できる TCP や SPX などのプロトコルを指します。 階層化プロトコルという用語は、単独で立つことができないプロトコルを記述するために使用されます。

LSP の初期化中に、LSP は多数の Winsock SPI 関数へのポインターを提供する必要があります。 これらの関数は、LSP のすぐ上のレイヤー (別の LSP または Ws2_32.DLL) によって通常の処理中に呼び出されます。

インストール可能なファイル システム (IFS) を実装する LSP は、単独で実装される関数へのポインターを選択的に提供するか、レイヤーによって提供されるポインターを LSP のすぐ下に戻すかを選択できます。 IFS 以外の LSP は独自のハンドルを提供するため、すべての Winsock SPI 関数を実装する必要があります。 これは、各 SPI では、作成したすべてのソケット ハンドルを下位プロバイダー (別の LSP または基本プロトコル) のソケット ハンドルにマップするために LSP が必要になるためです。

ただし、すべての LSP は、Winsock SPI 関数のサブセットに対してのみ追加の処理を行うことで、特定の作業を実行します。

LSP が実装する SPI 関数のサブセットと、それらの各関数に対して実行される追加処理の性質に基づいて、LSP カテゴリを定義できます。

LSP を分類し、Winsock ソケットを使用するアプリケーションを分類することで、実行時に特定のプロセスに LSP を関与させる必要があるかどうかを選択的に判断できるようになります。

Windows Vista 以降では、LSP は Windows ソケットの呼び出しとデータとの対話方法に基づいて分類できます。 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 はプロキシとして機能し、パケットをリダイレクトします。
**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
Library Ws2_32.lib
[DLL] Ws2_32.dll

こちらもご覧ください

階層型サービス プロバイダーとアプリケーションの分類

WSAStartup

WSCGetProviderInfo

WSCGetProviderInfo32

WSCSetApplicationCategory

WSCSetProviderInfo

WSCSetProviderInfo32