次の方法で共有


WSCWriteNameSpaceOrder 関数 (sporder.h)

WSCWriteNameSpaceOrder 関数は、使用可能な Windows ソケット (Winsock) 2 名前空間プロバイダーの順序を変更します。 名前空間プロバイダーの順序によって、名前解決を列挙または照会するときの名前空間の優先順位が決まります。

構文

int WSCWriteNameSpaceOrder(
  [in] LPGUID lpProviderId,
  [in] DWORD  dwNumberOfEntries
);

パラメーター

[in] lpProviderId

WSANAMESPACE_INFO構造体に見られる NSProviderId 要素の配列。 NSProviderId 要素の順序は、名前空間プロバイダーの新しい優先順位です。

[in] dwNumberOfEntries

NSProviderId 配列内の要素の数。

戻り値

ルーチンが成功した場合、関数は ERROR_SUCCESS (ゼロ) を返します。 それ以外の場合は、特定のエラー コードを返します。

エラー コード 意味
WSAEFAULT
NSProviderId 配列は、プロセス アドレス空間内に完全に含まれていません。
WSAEINVAL
1 つ以上の引数は入力パラメーターが無効であり、アクションは実行されませんでした。
WSANO_RECOVERY
回復不可能なエラーが発生しました。 このエラーは、次のようないくつかの条件で返されます。ユーザーが Winsock レジストリに書き込むのに必要な管理特権がない、または別のアプリケーションが現在名前空間プロバイダー カタログに書き込んでいる。
WSASYSCALLFAILURE
失敗しないシステム呼び出しが失敗しました。
WSATRY_AGAIN
関数は、別のスレッドまたはプロセスによって呼び出されます。
WSA_NOT_ENOUGH_MEMORY
操作を実行するために使用できるメモリが不足していました。
(その他)
この関数は、レジストリ エラー コードを返す場合があります。

解説

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

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

名前解決のクライアント要求では、 WSALookupServiceBeginWSALookupServiceNext、および 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 とリンクすることでインポートできます。 Service Pack 2 (SP2) および Windows Server 2003 Service Pack 1 (SP1) 以降で Windows XP で実行されているコンピューターの場合、 netsh.exe winsock show catalog コマンドには、システムにインストールされているプロトコル プロバイダーと名前空間プロバイダーの両方が表示されます。

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

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

次の一覧では、 WSCWriteNameSpaceOrder 関数が失敗する可能性があるシナリオについて説明します。

  • dwNumberOfEntries パラメーターは、登録済みの名前空間プロバイダーの数と等しくありません。
  • NSProviderId 配列に無効な名前空間プロバイダー識別子が含まれています。
  • NSProviderId 配列には、すべての有効な名前空間プロバイダー識別子が 1 回限り含まれているわけではありません。
  • 関数はレジストリにアクセスできません (たとえば、ユーザーのアクセス許可が不十分です)。
  • 別のプロセス (またはスレッド) が現在関数を呼び出しています。

要件

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

関連項目

WSAEnumNameSpaceProviders

WSANAMESPACE_INFO

WSAQUERYSET

WSCEnumNameSpaceProviders32

WSCInstallNameSpace

WSCInstallNameSpace32

WSCWriteNameSpaceOrder32