WSAEnumNameSpaceProvidersW 함수(winsock2.h)
WSAEnumNameSpaceProviders 함수는 사용 가능한 네임스페이스 공급자에 대한 정보를 검색합니다.
구문
INT WSAAPI WSAEnumNameSpaceProvidersW(
[in, out] LPDWORD lpdwBufferLength,
[out] LPWSANAMESPACE_INFOW 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 헤더는 WSAEnumNameSpaceProviders를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8.1, Windows Vista [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | winsock2.h |
라이브러리 | Ws2_32.lib |
DLL | Ws2_32.dll |