WSCWriteNameSpaceOrder32 関数 (sporder.h)
WSCWriteNameSpaceOrder32 関数は、32 ビット カタログ内の使用可能な Windows ソケット (Winsock) 2 名前空間プロバイダーの順序を変更します。 名前空間プロバイダーの順序によって、名前解決を列挙または照会するときの名前空間の優先順位が決まります。
構文
int WSCWriteNameSpaceOrder32(
[in] LPGUID lpProviderId,
[in] DWORD dwNumberOfEntries
);
パラメーター
[in] lpProviderId
WSANAMESPACE_INFO構造体にある NSProviderId 要素の配列。 NSProviderId 要素の順序は、名前空間プロバイダーの新しい優先順位です。
[in] dwNumberOfEntries
NSProviderId 配列内の要素の数。
戻り値
ルーチンが成功した場合、関数は ERROR_SUCCESS (ゼロ) を返します。 それ以外の場合は、特定のエラー コードを返します。
エラー コード | 意味 |
---|---|
NSProviderId 配列は、プロセス アドレス空間内に完全には含まれていません。 | |
入力パラメーターが無効であり、アクションは実行されませんでした。 | |
回復不可能なエラーが発生しました。 このエラーは、Winsock レジストリを開けなかった、ユーザーが Winsock レジストリに書き込むのに必要な管理特権がない、または別のアプリケーションが現在名前空間プロバイダー カタログに書き込んでいるなど、いくつかの条件で返されます。 | |
失敗しないシステム呼び出しが失敗しました。 | |
関数は、別のスレッドまたはプロセスによって呼び出されます。 | |
操作を実行するために使用できるメモリが不足していました。 | |
|
関数は、レジストリ エラー コードを返す場合があります。 |
解説
名前空間プロバイダーは、 WSCInstallNameSpace32 関数を使用して、32 ビット名前空間プロバイダー カタログ内の 64 ビット プラットフォームにインストールされます。 32 ビット カタログ内の名前空間プロバイダーが最初にインストールされる順序は、 WSCEnumNameSpaceProviders32 を介して列挙される既定の順序を制御します。 さらに重要なのは、この順序は、クライアントが名前解決を要求したときに名前空間プロバイダーが考慮される順序も制御することです。 64 ビット プラットフォームでは、 WSCWriteNameSpaceOrder32 関数が提供され、64 ビット プロセスで 32 ビット名前空間プロバイダー カタログ内の名前空間プロバイダーの順序を変更できます。 ネイティブ カタログ内の名前空間プロバイダーの順序は、 WSCWriteNameSpaceOrder 関数を使用して変更できます。
現在の名前空間プロバイダー カタログは、次のレジストリ キーの下のレジストリに格納されます:system\Current Control Set\Services\Winsock2\Parameters\HKEY_LOCAL_MACHINE\NameSpace_Catalog5
名前解決のクライアント要求では、 WSALookupServiceBegin、 WSALookupServiceNext、および 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 グループのメンバーとしてログオンしているユーザーによって実行された場合、 requestedExecutionLevel が requireAdministrator に設定されたマニフェスト ファイルでアプリケーションがマークされていない限り、この呼び出しは失敗します。 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 |