WSAEnumNameSpaceProvidersA 関数 (winsock2.h)
WSAEnumNameSpaceProviders 関数は、使用可能な名前空間プロバイダーに関する情報を取得します。
構文
INT WSAAPI WSAEnumNameSpaceProvidersA(
[in, out] LPDWORD lpdwBufferLength,
[out] LPWSANAMESPACE_INFOA lpnspBuffer
);
パラメーター
[in, out] lpdwBufferLength
入力時に、 lpnspBuffer が指すバッファーに含まれるバイト数。 出力時 (関数が失敗し、エラーが WSAEFAULT の場合)、 lpnspBuffer が要求したすべての情報を取得するために渡す最小バイト数。 WSAEnumNameSpaceProviders に渡されるバッファーは、すべての名前空間情報を保持するのに十分である必要があります。
[out] lpnspBuffer
WSANAMESPACE_INFO構造体でいっぱいのバッファー。 返される構造体は、バッファーの先頭に連続して配置されます。 構造体内のポインターによって参照される可変サイズの情報は、固定サイズの構造体の末尾とバッファーの末尾の間にあるバッファー内の場所を指します。 入力された構造体の数は、 WSAEnumNameSpaceProviders の戻り値です。
戻り値
WSAEnumNameSpaceProviders 関数は、lpnspBuffer にコピーされたWSANAMESPACE_INFO構造体の数を返します。 それ以外の場合は、SOCKET_ERROR値が返され、 WSAGetLastError を呼び出すことによって特定のエラー番号を取得できます。
エラー コード | 意味 |
---|---|
lpnspBuffer パラメーターが NULL ポインターであるか、バッファーの長さ lpdwBufferLength が小さすぎて、関連するすべてのWSANAMESPACE_INFO構造体と関連情報を受信できませんでした。 このエラーが返されると、 lpdwBufferLength パラメーターで必要なバッファー長が返されます。 | |
WS2_32.DLL が初期化されていません。 アプリケーションは、Windows ソケット関数を呼び出す前に、まず WSAStartup を呼び出す必要があります。 | |
操作を実行するためのメモリが不足していました。 |
解説
WSAEnumNameSpaceProviders 関数は、lpnspBuffer パラメーターが指すバッファー内の使用可能な名前空間プロバイダーに関する情報を返します。 返されるバッファーには、バッファーの先頭に連続 して配置WSANAMESPACE_INFO 構造体の配列が含まれています。 WSANAMESPACE_INFO構造体内のポインターによって参照される可変サイズの情報は、固定WSANAMESPACE_INFO構造体の末尾とバッファーの末尾の間にあるバッファー内の場所を指します。 入力WSANAMESPACE_INFO構造体の数は、 によって返されます。
WSAEnumNameSpaceProviders 関数。
各WSANAMESPACE_INFO構造体エントリには、名前空間プロバイダーのインストール時に WSCInstallNameSpace 関数と WSCInstallNameSpace32 関数に渡される名前空間エントリに関するプロバイダー固有の情報が含まれます。
WSAEnumNameSpaceProvidersEx 関数は、WSAEnumNameSpaceProviders 関数の拡張バージョンです。 WSCEnumNameSpaceProvidersEx32 関数は、64 ビット プラットフォームで使用できる 32 ビット名前空間プロバイダーに関する情報を返す WSAEnumNameSpaceProviders 関数の拡張バージョンです。
コード例
次の例では、 WSAEnumNameSpaceProviders 関数を使用して、使用可能な名前空間プロバイダーに関する情報を取得する方法を示します。#ifndef UNICODE
#define UNICODE 1
#endif
#include <winsock2.h>
#include <ws2tcpip.h>
#include <objbase.h>
#include <stdio.h>
// Link with ws2_32.lib and ole32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "ole32.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
// Note: could also use malloc() and free()
int wmain()
{
//-----------------------------------------
// Declare and initialize variables
WSADATA wsaData;
int iResult;
int iError = 0;
INT iNuminfo = 0;
int i;
// Allocate a 4K buffer to retrieve all the namespace providers
DWORD dwInitialBufferLen = 4096;
DWORD dwBufferLen;
LPWSANAMESPACE_INFO lpProviderInfo;
// variables needed for converting provider GUID to a string
int iRet = 0;
WCHAR GuidString[40] = {0};
// Set dwBufferLen to the initial buffer length
dwBufferLen = dwInitialBufferLen;
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
wprintf(L"WSAStartup failed: %d\n", iResult);
return 1;
}
lpProviderInfo = (LPWSANAMESPACE_INFO) MALLOC(dwBufferLen);
if (lpProviderInfo == NULL) {
wprintf(L"Memory allocation for providers buffer failed\n");
WSACleanup();
return 1;
}
iNuminfo = WSAEnumNameSpaceProviders(&dwBufferLen, lpProviderInfo);
if (iNuminfo == SOCKET_ERROR) {
iError = WSAGetLastError();
if (iError == WSAEFAULT && dwBufferLen != dwInitialBufferLen) {
wprintf(L"WSAEnumNameSpaceProviders failed with too small a buffer\n");
wprintf(L" Increasing the buffer to %u\n\n", dwBufferLen);
if (lpProviderInfo) {
FREE(lpProviderInfo);
lpProviderInfo = NULL;
}
lpProviderInfo = (LPWSANAMESPACE_INFO) MALLOC(dwBufferLen);
if (lpProviderInfo == NULL) {
wprintf(L"Memory allocation for providers buffer failed\n");
WSACleanup();
return 1;
}
iNuminfo = WSAEnumNameSpaceProviders(&dwBufferLen, lpProviderInfo);
if (iNuminfo == SOCKET_ERROR) {
wprintf(L"WSAEnumNameSpaceProviders failed with error: %d\n",
WSAGetLastError() );
if (lpProviderInfo) {
FREE(lpProviderInfo);
lpProviderInfo = NULL;
}
WSACleanup();
return 1;
}
else
wprintf(L"\n");
}
else {
wprintf(L"WSAEnumNameSpaceProviders failed with error: %d\n",
WSAGetLastError() );
if (lpProviderInfo) {
FREE(lpProviderInfo);
lpProviderInfo = NULL;
}
WSACleanup();
return 1;
}
}
wprintf(L"WSAEnumNameSpaceProviders succeeded with provider data count = %d\n\n",
iNuminfo);
for (i= 0; i < iNuminfo; i++) {
iRet = StringFromGUID2(lpProviderInfo[i].NSProviderId, (LPOLESTR) &GuidString, 39);
if (iRet == 0)
wprintf(L"StringFromGUID2 failed\n");
else
wprintf(L"NameSpace ProviderId[%u] = %ws\n",i, GuidString);
wprintf(L"NameSpace[%u] = ", i);
switch (lpProviderInfo[i].dwNameSpace) {
case NS_DNS:
wprintf(L"Domain Name System (NS_DNS)\n");
break;
case NS_WINS:
wprintf(L"Windows Internet Naming Service (NS_WINS)\n");
break;
case NS_NETBT:
wprintf(L"NetBIOS (NS_NETBT)\n");
break;
case NS_NTDS:
wprintf(L"Windows NT Directory Services (NS_NTDS)\n");
break;
case NS_NLA:
wprintf(L"Network Location Awareness (NS_NLA)\n");
break;
// following values only defined on Vista and later
#if(_WIN32_WINNT >= 0x0600)
case NS_BTH:
wprintf(L"Bluetooth (NS_BTH)\n");
break;
case NS_EMAIL:
wprintf(L"Email (NS_EMAIL)\n");
break;
case NS_PNRPNAME:
wprintf(L"Peer-to-peer (NS_PNRPNAME)\n");
break;
case NS_PNRPCLOUD:
wprintf(L"Peer-to-peer collection (NS_PNRPCLOUD)\n");
break;
#endif
default:
wprintf(L"Other value (%u)\n", lpProviderInfo[i].dwNameSpace);
break;
}
if (lpProviderInfo[i].fActive)
wprintf(L"Namespace[%u] is active\n", i);
else
wprintf(L"Namespace[%u] is inactive\n", i);
wprintf(L"NameSpace Version[%u] = %u\n", i, lpProviderInfo[i].dwVersion);
wprintf(L"Namespace Identifier[%u] = %ws\n\n", i, lpProviderInfo[i].lpszIdentifier);
}
if (lpProviderInfo) {
FREE(lpProviderInfo);
lpProviderInfo = NULL;
}
WSACleanup();
return 0;
}
Windows Phone 8:WSAEnumNameSpaceProvidersW 関数は、Windows Phone 8 以降のWindows Phone ストア アプリでサポートされています。
Windows 8.1と Windows Server 2012 R2: WSAEnumNameSpaceProvidersW 関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。
注意
winsock2.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして WSAEnumNameSpaceProviders を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
サポートされている最小のクライアント | Windows 8.1、 Windows Vista [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winsock2.h |
Library | Ws2_32.lib |
[DLL] | Ws2_32.dll |