LPWSCUPDATEPROVIDER
コールバックシグネチャ
INT LPWSCUPDATEPROVIDER(
GUID* lpProviderId,
LPWSTR lpszProviderDllPath,
WSAPROTOCOL_INFOW* lpProtocolInfoList,
DWORD dwNumberOfEntries,
INT* lpErrno
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| lpProviderId | GUID* | プロバイダーのグローバル一意識別子 (GUID) へのポインターです。 |
| lpszProviderDllPath | LPWSTR | プロバイダーの 64 ビット DLL への読み込みパスを格納した Unicode 文字列へのポインターです。この文字列は通常のパス解決規則に従い、環境文字列 (%SystemRoot% など) を埋め込むことができます。埋め込まれた環境文字列は、Ws2_32.dll がアプリケーションに代わってプロバイダー DLL を読み込む際に展開されます。埋め込まれた環境文字列を展開した後、Ws2_32.dll はその結果の文字列を LoadLibrary 関数に渡し、この関数がプロバイダーをメモリに読み込みます。詳細については、LoadLibrary を参照してください。 |
| lpProtocolInfoList | WSAPROTOCOL_INFOW* | WSAProtocol_Info 構造体の配列へのポインターです。各構造体は、そのプロバイダーがサポートするプロトコル、アドレスファミリ、ソケットの種類を指定または変更します。 |
| dwNumberOfEntries | DWORD | lpProtocolInfoList 配列内のエントリ数です。 |
| lpErrno | INT* | 関数が失敗した場合に、エラーコードを受け取るポインターです。 |
公式ドキュメント
WSCUpdateProvider 関数は、システム構成データベース内の、指定されたトランスポートプロバイダーを変更します。
戻り値
エラーが発生しなかった場合、 WSCUpdateProvider はゼロを返します。それ以外の場合は SOCKET_ERROR を返し、具体的なエラーコードが lpErrno パラメーターに返されます。
| エラーコード | 意味 |
|---|---|
| 引数の 1 つ以上が、ユーザーアドレス空間の有効な範囲内にありません。 | |
| 引数の 1 つ以上が無効です。 | |
| 回復不能なエラーが発生しました。このエラーは、Winsock レジストリへの書き込みに必要な管理者権限をユーザーが持っていない場合や、カタログエントリのオープンまたは書き込みに失敗した場合など、いくつかの条件で返されます。 | |
| 使用できるメモリーが不足しています。このエラーは、新しいカタログエントリを割り当てるためのメモリーが不足している場合に返されます。 |
解説(Remarks)
WSCUpdateProvider 関数は、指定されたプロバイダーの Windows Sockets 2 構成情報を変更します。この関数は、ベースプロトコル、階層化プロトコル、プロトコルチェーンのいずれにも適用できます。
Winsock 2 は階層化プロトコルに対応しています。階層化プロトコルとは、上位レベルの通信機能のみを実装し、リモートエンドポイントとの実際のデータ交換は下位のトランスポートスタックに依存するプロトコルです。階層化プロトコルの例としては、認証を実行し、相互に合意した暗号化方式を確立するために、接続確立の処理にプロトコルを追加するセキュリティ層が挙げられます。このようなセキュリティプロトコルは通常、TCP や SPX といった下位の信頼性のあるトランスポートプロトコルのサービスを必要とします。ベースプロトコルという用語は、TCP や SPX のように、リモートエンドポイントとのデータ通信を単独で実行できるプロトコルを指します。階層化プロトコルという用語は、単独では機能できないプロトコルを表すために使用されます。プロトコルチェーンは、1 つ以上の階層化プロトコルを連結し、ベースプロトコルで固定したものとして定義されます。 ベースプロトコルでは、WSAProtocol_Info 構造体の ChainLen メンバーに、1 と定義されている BASE_PROTOCOL が設定されます。階層化プロトコルでは、WSAPROTOCOL_INFO 構造体の ChainLen メンバーに、ゼロと定義されている LAYERED_PROTOCOL が設定されます。プロトコルチェーンでは、WSAPROTOCOL_INFO 構造体の ChainLen メンバーに 1 より大きい値が設定されます。
成功した場合、WSCUpdateProvider は WSAProviderConfigChange を呼び出して変更の通知を登録しているすべての関係アプリケーションに通知しようとします。
WSCUpdateProvider 関数は、Administrators グループのメンバーとしてログオンしているユーザーだけが呼び出せます。Administrators グループのメンバーでないユーザーが WSCUpdateProvider を呼び出した場合、この関数呼び出しは失敗します。
Windows Vista または Windows Server 2008 で実行しているコンピューターでは、ユーザーアカウント制御 (UAC) が原因でこの関数が失敗することもあります。この関数を含むアプリケーションを、組み込みの Administrator 以外の Administrators グループのメンバーとしてログオンしているユーザーが実行した場合、アプリケーションのマニフェストファイルで requestedExecutionLevel に requireAdministrator が指定されていない限り、この呼び出しは失敗します。Windows Vista または Windows Server 2008 でアプリケーションにこのマニフェストファイルがない場合、組み込みの Administrator 以外の Administrators グループのメンバーとしてログオンしているユーザーは、この関数を成功させるために、組み込みの Administrator として昇格したシェル (管理者として実行) でアプリケーションを実行する必要があります。
ファイルのインストールやサービスプロバイダー固有の構成は、呼び出し元が実行する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)