Win32 API 日本語リファレンス
ホーム › Networking.WinSock › LPWSCWRITEPROVIDERORDER

LPWSCWRITEPROVIDERORDER

コールバック

シグネチャ

INT LPWSCWRITEPROVIDERORDER(
    DWORD* lpwdCatalogEntryId,
    DWORD dwNumberOfEntries
);

パラメーター

フィールド型説明
lpwdCatalogEntryIdDWORD*WSAPROTOCOL_INFO 構造体にある CatalogEntryId 要素の配列へのポインターです。CatalogEntryId 要素の並び順が、プロトコルの新しい優先順位になります。
dwNumberOfEntriesDWORDlpwdCatalogEntryId 配列の要素数です。

公式ドキュメント

WSCWriteProviderOrder 関数は、利用可能なトランスポートプロバイダーの順序を変更するために使用します。プロトコルの順序は、列挙されるときや使用するために選択されるときのプロトコルの優先度を決定します。

戻り値

この関数は、処理に成功した場合は ERROR_SUCCESS(ゼロ)を返します。それ以外の場合は、固有のエラーコードを返します。

エラーコード 意味
WSAEINVAL
1 つ以上の引数が無効です。処理は行われませんでした。
WSANO_RECOVERY
回復不能なエラーが発生しました。このエラーは、Winsock レジストリへの書き込みに必要な管理者権限をユーザーが持っていない場合や、カタログエントリのオープンまたは書き込みに失敗した場合など、いくつかの条件で返されます。
WSA_NOT_ENOUGH_MEMORY
メモリーが不足しています。このエラーは、新しいカタログエントリを割り当てるための十分なメモリーがないときに返されます。
(その他)
このルーチンは、任意のレジストリエラーコードを返すことがあります。

解説(Remarks)

トランスポートサービスプロバイダーが最初にインストールされた順序によって、サービスプロバイダーインターフェイスの WSCEnumProtocols、またはアプリケーションインターフェイスの WSAEnumProtocols で列挙される順序が決まります。さらに重要な点として、この順序は、クライアントがアドレスファミリー、種類、プロトコル識別子に基づいてソケットの作成を要求したときに、どのプロトコルとサービスプロバイダーが検討されるかの順序も決定します。

Windows Sockets 2 には Sporder.exe というアプリケーションが含まれており、プロトコルのインストール後に、インストール済みプロトコルのカタログを対話的に並べ替えることができます。また Windows Sockets 2 には補助 DLL の Sporder.dll も含まれており、プロトコルを並べ替えるためのこの手続き型インターフェイスをエクスポートします。このインターフェイスは Sporder.lib をリンクすることでインポートできます。

次のような場合に、 WSCWriteProviderOrder 関数は失敗することがあります。

成功した場合、WSCWriteProviderOrder は WSAProviderConfigChange を呼び出して、変更の通知を登録しているすべての関係するアプリケーションに知らせようとします。

WSCWriteProviderOrder 関数を呼び出せるのは、Administrators グループのメンバーとしてログオンしたユーザーだけです。Administrators グループのメンバーでないユーザーが WSCWriteProviderOrder を呼び出した場合、この関数呼び出しは失敗し、 WSANO_RECOVERY が返されます。 Windows Vista または Windows Server 2008 で動作するコンピューターでは、ユーザーアカウント制御(UAC)が原因でこの関数が失敗することもあります。この関数を含むアプリケーションが、ビルトインの Administrator 以外の Administrators グループのメンバーとしてログオンしたユーザーによって実行された場合、マニフェストファイルで requestedExecutionLevel が requireAdministrator に設定されていない限り、この呼び出しは失敗します。Windows Vista または Windows Server 2008 上のアプリケーションにこのマニフェストファイルがない場合、ビルトインの Administrator 以外の Administrators グループのメンバーとしてログオンしたユーザーは、この関数を成功させるために、ビルトインの Administrator として昇格したシェル(管理者として実行)でアプリケーションを実行する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)