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** が指定されている場合、このエラーが返されます。 |
1 つ以上の引数がユーザー・アドレス・スペースの有効な部分にありません。 | |
1 つ以上の引数が無効です。 | |
回復不可能なエラーが発生しました。 このエラーは、ユーザーが 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 などのプロトコルを指します。 階層化プロトコルという用語は、スタンドアロンにできないプロトコルを記述するために使用されます。 その後、プロトコル チェーンは、1 つ以上の階層化されたプロトコルとして定義され、ベース プロトコルによって連結され、固定されます。 基本プロトコルには、WSAProtocol_Info 構造体の ChainLen メンバーが BASE_PROTOCOL に設定され、1 に定義されています。 階層化プロトコルでは、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 プロセスなど) には読み込まれません。
WSCSetProviderInfo32 関数は、Administrators グループのメンバーとしてログオンしているユーザーのみが呼び出すことができます。 Administrators グループのメンバーではないユーザーが WSCSetProviderInfo32 を呼び出すと、関数呼び出しは失敗し、lpErrno パラメーターでWSANO_RECOVERYが返されます。 この関数は、ユーザー アカウント制御 (UAC) が原因で失敗する可能性もあります。 この関数を含むアプリケーションが、組み込みの Administrator 以外の Administrators グループのメンバーとしてログオンしているユーザーによって実行された場合、 requestedExecutionLevel が requireAdministrator に設定されたマニフェスト ファイルでアプリケーションがマークされていない限り、この呼び出しは失敗します。 Windows Vista または Windows Server 2008 上のアプリケーションにこのマニフェスト ファイルがない場合、組み込みの Administrator 以外の Administrators グループのメンバーとしてログオンしたユーザーは、この関数を成功させるために、拡張シェルで組み込みの Administrator (RunAs 管理者) としてアプリケーションを実行する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | ws2spi.h |
Library | Ws2_32.lib |
[DLL] | Ws2_32.dll |