Fungsi WSAEnumNameSpaceProvidersA (winsock2.h)
Fungsi WSAEnumNameSpaceProviders mengambil informasi tentang penyedia namespace yang tersedia.
Sintaks
INT WSAAPI WSAEnumNameSpaceProvidersA(
[in, out] LPDWORD lpdwBufferLength,
[out] LPWSANAMESPACE_INFOA lpnspBuffer
);
Parameter
[in, out] lpdwBufferLength
Pada input, jumlah byte yang terkandung dalam buffer yang diacu oleh lpnspBuffer. Pada output (jika fungsi gagal, dan kesalahannya adalah WSAEFAULT), jumlah minimum byte yang akan diteruskan untuk lpnspBuffer untuk mengambil semua informasi yang diminta. Buffer yang diteruskan ke WSAEnumNameSpaceProviders harus cukup untuk menyimpan semua informasi namespace.
[out] lpnspBuffer
Buffer yang diisi dengan struktur WSANAMESPACE_INFO . Struktur yang dikembalikan terletak berturut-turut di kepala buffer. Informasi berukuran variabel yang direferensikan oleh pointer dalam struktur menunjuk ke lokasi dalam buffer yang terletak di antara akhir struktur berukuran tetap dan akhir buffer. Jumlah struktur yang diisi adalah nilai pengembalian WSAEnumNameSpaceProviders.
Nilai kembali
Fungsi WSAEnumNameSpaceProviders mengembalikan jumlah struktur WSANAMESPACE_INFO yang disalin ke dalam lpnspBuffer. Jika tidak, nilai SOCKET_ERROR dikembalikan, dan nomor kesalahan tertentu dapat diambil dengan memanggil WSAGetLastError.
Kode kesalahan | Makna |
---|---|
Parameter lpnspBuffer adalah pointerNULL atau panjang buffer, lpdwBufferLength, terlalu kecil untuk menerima semua struktur WSANAMESPACE_INFO yang relevan dan informasi terkait. Ketika kesalahan ini dikembalikan, panjang buffer yang diperlukan dikembalikan dalam parameter lpdwBufferLength . | |
WS2_32.DLL belum diinisialisasi. Aplikasi harus terlebih dahulu memanggil WSAStartup sebelum memanggil fungsi Windows Sockets apa pun. | |
Memori tidak cukup untuk melakukan operasi. |
Keterangan
Fungsi WSAEnumNameSpaceProviders mengembalikan informasi tentang penyedia namespace yang tersedia di buffer yang diacu oleh parameter lpnspBuffer . Buffer yang dikembalikan berisi array struktur WSANAMESPACE_INFO yang terletak berturut-turut di kepala buffer. Informasi berukuran variabel yang direferensikan oleh pointer dalam struktur WSANAMESPACE_INFO menunjuk ke lokasi dalam buffer yang terletak di antara akhir struktur WSANAMESPACE_INFO tetap dan akhir buffer. Jumlah struktur WSANAMESPACE_INFO yang diisi dikembalikan oleh
Fungsi WSAEnumNameSpaceProviders .
Setiap entri struktur WSANAMESPACE_INFO berisi informasi khusus penyedia pada entri namespace yang diteruskan ke fungsi WSCInstallNameSpace dan WSCInstallNameSpace32 saat penyedia namespace diinstal.
Fungsi WSAEnumNameSpaceProvidersEx adalah versi yang disempurnakan dari fungsi WSAEnumNameSpaceProviders . Fungsi WSCEnumNameSpaceProvidersEx32 adalah versi yang disempurnakan dari fungsi WSAEnumNameSpaceProviders yang mengembalikan informasi tentang penyedia namespace 32-bit yang tersedia untuk digunakan pada platform 64-bit.
Contoh Kode
Contoh berikut menunjukkan penggunaan fungsi WSAEnumNameSpaceProviders untuk mengambil informasi tentang penyedia namespace yang tersedia.#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: Fungsi WSAEnumNameSpaceProvidersW didukung untuk aplikasi Windows Phone Store di Windows Phone 8 dan yang lebih baru.
Windows 8.1 dan Windows Server 2012 R2: Fungsi WSAEnumNameSpaceProvidersW didukung untuk aplikasi Windows Store di Windows 8.1, Windows Server 2012 R2, dan yang lebih baru.
Catatan
Header winsock2.h mendefinisikan WSAEnumNameSpaceProviders sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta pra-prosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.
Persyaratan
Klien minimum yang didukung | Windows 8.1, Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | winsock2.h |
Pustaka | Ws2_32.lib |
DLL | Ws2_32.dll |