次の方法で共有


WSCWriteNameSpaceOrder32 関数 (sporder.h)

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

メモ この呼び出しは、64 ビット プラットフォームで使用する WSCWriteNameSpaceOrder の厳密な 32 ビット バージョンです。 64 ビット プロセスが 32 ビット名前空間プロバイダー カタログの順序を変更できるようにするために提供されます。

 

構文

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

パラメーター

[in] lpProviderId

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

[in] dwNumberOfEntries

NSProviderId 配列内の要素の数。

戻り値

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

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

解説

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

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

名前解決のクライアント要求では、 WSALookupServiceBeginWSALookupServiceNext、および WSALookupServiceEnd ルーチンが 使用されます。 WSALookupServiceBegin に渡される WSAQUERYSET 構造体の dwNameSpace メンバーは、検索を制限する単一の名前空間 (NS_DNSなど) の識別子に設定され、すべての名前空間を含むようにNS_ALL。 複数の名前空間プロバイダーが特定の名前空間 (たとえば、NS_DNS) をサポートしている場合、lpNSProviderId メンバーが特定の名前空間プロバイダーに設定されていない限り、要求された dwNameSpace に一致するすべての名前空間プロバイダーからの結果が返されます。 dwNameSpace メンバーにNS_ALLが指定されている場合、すべての名前空間プロバイダーの結果が返されます。 結果が返される順序は、カタログ内の名前空間プロバイダーの順序によって異なります。

Windows SDK には、インストールされている名前空間プロバイダーのカタログを表示できる SpOrder.exe と呼ばれるアプリケーションが含まれています。 Winsock 2 には、32 ビット名前空間プロバイダー カタログ内の名前空間プロバイダーを並べ替える WSCWriteNameSpaceOrder32 関数をエクスポートする 64 ビット プラットフォームの ws2_32.DLL が含まれています。 このインターフェイスは、WS2_32.lib とリンクすることでインポートできます。 Service Pack 2 (SP2) および Windows Server 2003 Service Pack 1 (SP1) 以降を使用して Windows XP で実行されているコンピューターの場合、 netsh.exe winsock show catalog コマンドには、インストールされているプロトコル プロバイダーと名前空間プロバイダーの両方が表示されます。 ネイティブ 64 ビット カタログが最初に表示され、その後に 32 ビット プロバイダー カタログが表示されます (名前の後に 32 が付きます)。

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

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

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

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

要件

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

関連項目

WSAEnumNameSpaceProviders

WSANAMESPACE_INFO

WSAQUERYSET

WSCEnumNameSpaceProviders32

WSCInstallNameSpace

WSCInstallNameSpace32

WSCWriteNameSpaceOrder