WSAEnumNameSpaceProvidersA 함수(winsock2.h)
WSAEnumNameSpaceProviders 함수는 사용 가능한 네임스페이스 공급자에 대한 정보를 검색합니다.
통사론
INT WSAAPI WSAEnumNameSpaceProvidersA(
[in, out] LPDWORD lpdwBufferLength,
[out] LPWSANAMESPACE_INFOA lpnspBuffer
);
매개 변수
[in, out] lpdwBufferLength
입력에서 lpnspBuffer가 가리키는 버퍼에 포함된 바이트 수가. 출력에서(함수가 실패하고 WSAEFAULT오류가
[out] lpnspBuffer
WSANAMESPACE_INFO 구조체로 채워진 버퍼입니다. 반환된 구조체는 버퍼의 헤드에 연속적으로 배치됩니다. 구조체의 포인터에서 참조하는 변수 크기 정보는 고정 크기 구조체의 끝과 버퍼 끝 사이에 있는 버퍼 내의 위치를 가리킵니다. 채워진 구조체의 수는
반환 값
WSAEnumNameSpaceProviders 함수는 lpnspBuffer복사된 WSANAMESPACE_INFO 구조체의 수를 반환합니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError호출하여 특정 오류 번호를 검색할 수 있습니다.
오류 코드 | 의미 |
---|---|
|
|
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 |
참고 항목
WSAEnumNameSpaceProvidersEx
WSAStartup
WSCInstallNameSpace
WSCInstallNameSpaceEx