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

LPWSCWRITENAMESPACEORDER

コールバック

シグネチャ

INT LPWSCWRITENAMESPACEORDER(
    GUID* lpProviderId,
    DWORD dwNumberOfEntries
);

パラメーター

フィールド型説明
lpProviderIdGUID*WSANAMESPACE_INFO 構造体に含まれる NSProviderId 要素の配列です。NSProviderId 要素の順序が、ネームスペースプロバイダーの新しい 優先順位になります。
dwNumberOfEntriesDWORDNSProviderId 配列の要素数です。

公式ドキュメント

WSCWriteNameSpaceOrder 関数は、利用可能な Windows Sockets (Winsock) 2 ネームスペースプロバイダーの順序を変更します。ネームスペースプロバイダーの順序は、列挙時や名前解決のクエリ時におけるネームスペースの優先度を決定します。

戻り値

関数が成功した場合は ERROR_SUCCESS (0) を返します。それ以外の場合は、固有のエラーコードを返します。

エラーコード 意味
WSAEFAULT
NSProviderId 配列がプロセスのアドレス空間内に完全に含まれていません。
WSAEINVAL
1 つ以上の入力パラメーターが無効であり、処理は行われませんでした。
WSANO_RECOVERY
回復不能なエラーが発生しました。このエラーは、次を含むいくつかの条件で返されます。Winsock レジストリへの書き込みに必要な管理者権限をユーザーが持っていない場合や、他のアプリケーションが現在ネームスペースプロバイダーカタログに書き込みを行っている場合などです。
WSASYSCALLFAILURE
決して失敗しないはずのシステムコールが失敗しました。
WSATRY_AGAIN
この関数が別のスレッドまたはプロセスから呼び出されています。
WSA_NOT_ENOUGH_MEMORY
操作を実行するのに十分なメモリーがありませんでした。
(other)
この関数は、任意のレジストリエラーコードを返すことがあります。

解説(Remarks)

ネームスペースプロバイダーは WSCInstallNameSpace 関数を使用してインストールします。ネームスペースプロバイダーが最初にインストールされた順序が、 WSAEnumNameSpaceProviders で列挙されるときの既定の順序を決定します。さらに重要なことに、この順序は、クライアントが名前解決を要求したときにネームスペースプロバイダーが検討される順序も決定します。ネームスペースプロバイダーの順序は WSCWriteNameSpaceOrder 関数で変更できます。64 ビットプラットフォームでは、64 ビットプロセスが 32 ビットのネームスペースプロバイダーカタログ内の順序を変更できるように、WSCWriteNameSpaceOrder32 関数が提供されています。64 ビットプラットフォームでは、32 ビットのネームスペースプロバイダーカタログへのネームスペースプロバイダーのインストールに WSCInstallNameSpace32 関数を使用します。

現在のネームスペースプロバイダーカタログは、次のレジストリキーの下に格納されています。HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5

クライアントからの名前解決要求には、WSALookupServiceBegin、WSALookupServiceNext、WSALookupServiceEnd の各ルーチンを使用します。WSALookupServiceBegin に渡す WSAQUERYSET 構造体の dwNameSpace メンバーには、検索を限定する単一のネームスペースの識別子 (例: NS_DNS) を設定するか、すべてのネームスペースを対象にする場合は NS_ALL を設定します。複数のネームスペースプロバイダーが特定のネームスペース (例: NS_DNS) をサポートしている場合、lpNSProviderId メンバーで特定のネームスペースプロバイダーを指定しない限り、要求された dwNameSpace に一致するすべてのネームスペースプロバイダーからの結果が返されます。dwNameSpace メンバーに NS_ALL を指定した場合は、すべてのネームスペースプロバイダーからの結果が返されます。結果が返される順序は、カタログ内のネームスペースプロバイダーの順序に依存します。

Windows SDK には、インストール済みのネームスペースプロバイダーのカタログを表示できる SpOrder.exe というアプリケーションが含まれています。Windows Sockets 2 には、カタログ内のネームスペースプロバイダーを並べ替える WSCWriteNameSpaceOrder 関数をエクスポートする ws2_32.dll が含まれています。このインターフェイスは WS2_32.lib をリンクすることでインポートできます。Windows XP Service Pack 2 (SP2) および Windows Server 2003 Service Pack 1 (SP1) 以降を実行するコンピューターでは、netsh.exe winsock show catalog コマンドによって、システムにインストールされているプロトコルプロバイダーとネームスペースプロバイダーの両方が表示されます。

WSCWriteNameSpaceOrder は、Administrators グループのメンバーとしてログオンしているユーザーのみが呼び出せます。Administrators グループのメンバーでないユーザーが WSCWriteNameSpaceOrder を呼び出した場合、関数呼び出しは失敗し、lpErrno パラメーターに WSANO_RECOVERY が返されます。

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

次の一覧は、 WSCWriteNameSpaceOrder 関数が失敗する可能性のあるシナリオを示します。

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