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

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

戻り値

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

エラー コード 意味
ERROR_CALL_NOT_IMPLEMENTED
呼び出しは実装されていません。 InfoType パラメーターに **ProviderInfoAudit** が指定されている場合、このエラーが返されます。
WSAEFAULT
1 つ以上の引数がユーザー・アドレス・スペースの有効な部分にありません。
WSAEINVAL
1 つ以上の引数が無効です。
WSANO_RECOVERY
回復不可能なエラーが発生しました。 このエラーは、ユーザーが Winsock レジストリへの書き込みに必要な管理特権がない、または Winsock カタログ エントリを開くときにエラーが発生したなど、いくつかの条件で返されます。
WSA_NOT_ENOUGH_MEMORY
メモリが不足していました。 このエラーは、新しいカタログ エントリを割り当てるメモリが不足している場合に返されます。

解説

WSCSetProviderInfo は、階層化サービス プロバイダーの情報クラス データを設定するために使用されます。 InfoType パラメーターが ProviderInfoLspCategories に設定されている場合、成功した場合、WSCSetProviderInfo は、Info パラメーターで渡された値に基づいてプロバイダーによって実装される適切な LSP カテゴリ フラグを設定します。

Winsock 2 は、階層化されたプロトコルに対応します。 階層化プロトコルは、より高いレベルの通信機能のみを実装するプロトコルであり、リモート エンドポイントとのデータの実際の交換に基づくトランスポート スタックに依存します。 階層化されたプロトコルまたは階層化されたサービス プロバイダーの例としては、認証を実行し、暗号化スキームに基づいて相互に合意されたプロトコルを確立するために、接続確立プロセスにプロトコルを追加するセキュリティ層があります。 このようなセキュリティ プロトコルでは、一般に、TCP や SPX などの基になる信頼性の高いトランスポート プロトコルのサービスが必要になります。 基本プロトコルという用語は、リモート エンドポイントとのデータ通信を実行できる TCP や SPX などのプロトコルを指します。 階層化プロトコルという用語は、スタンドアロンにできないプロトコルを記述するために使用されます。 その後、プロトコル チェーンは、1 つ以上の階層化されたプロトコルとして定義され、ベース プロトコルによって連結され、固定されます。 基本プロトコルには、WSAPROTOCOL_INFO 構造体の ChainLen メンバーが 1 として定義されているBASE_PROTOCOLに設定されています。 階層化プロトコルでは、WSAPROTOCOL_INFO構造体の ChainLen メンバーが LAYERED_PROTOCOL に設定され、ゼロとして定義されます。 プロトコル チェーンには、WSAPROTOCOL_INFO構造体の ChainLen メンバーが 1 より大きく設定されています。

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

インストール可能なファイル システム (IFS) を実装する LSP は、単独で実装される関数へのポインターを選択的に提供するか、LSP のすぐ下にあるレイヤーによって提供されるポインターを渡すかを選択できます。 IFS 以外の CSP は、独自のハンドルを提供するため、すべての 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 プロセスなど) には読み込まれません。

WSCSetProviderInfo 関数は、Administrators グループのメンバーとしてログオンしているユーザーのみが呼び出すことができます。 Administrators グループのメンバーではないユーザーが WSCSetProviderInfo を呼び出すと、関数呼び出しは失敗し、lpErrno パラメーターでWSANO_RECOVERYが返されます。 この関数は、ユーザー アカウント制御 (UAC) が原因で失敗する可能性もあります。 この関数を含むアプリケーションが、組み込みの Administrator 以外の Administrators グループのメンバーとしてログオンしているユーザーによって実行された場合、 requestedExecutionLevelrequireAdministrator に設定されたマニフェスト ファイルでアプリケーションがマークされていない限り、この呼び出しは失敗します。 Windows Vista または Windows Server 2008 上のアプリケーションにこのマニフェスト ファイルがない場合、組み込みの Administrator 以外の Administrators グループのメンバーとしてログオンしたユーザーは、この関数を成功させるために、拡張シェルで組み込みの Administrator (RunAs 管理者) としてアプリケーションを実行する必要があります。

**注** TDI 機能は非推奨であり、今後のバージョンの Microsoft Windows では削除される予定です。 TDI の使用方法に応じて、Winsock カーネル (WSK) または Windows フィルタリング プラットフォーム (WFP) を使用します。 WFP と WSK の詳細については、次を参照してください。 Windows フィルタリング プラットフォームWinsock カーネル。 WSK と TDI に関する Windows Core ネットワークのブログ エントリについては、次を参照してください。 Winsock カーネル (WSK) の概要
 

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー ws2spi.h
Library Ws2_32.lib
[DLL] Ws2_32.dll

関連項目

WSCGetApplicationCategory WSCGetProviderInfo WSCSetApplicationCategoryWSC_PROVIDER_INFO_TYPE WSAPROTOCOL_INFO階層化されたサービス プロバイダーとアプリケーションの分類