WSAEnumNameSpaceProvidersA-Funktion (winsock2.h)

Die WSAEnumNameSpaceProviders-Funktion ruft Informationen zu verfügbaren Namespaceanbietern ab.

Syntax

INT WSAAPI WSAEnumNameSpaceProvidersA(
  [in, out] LPDWORD              lpdwBufferLength,
  [out]     LPWSANAMESPACE_INFOA lpnspBuffer
);

Parameter

[in, out] lpdwBufferLength

Bei der Eingabe die Anzahl der Bytes, die im Puffer enthalten sind, auf die lpnspBuffer verweist. Bei der Ausgabe (wenn die Funktion fehlschlägt und der Fehler WSAEFAULT ist), die Mindestanzahl von Bytes, die für den lpnspBuffer übergeben werden müssen, um alle angeforderten Informationen abzurufen. Der an WSAEnumNameSpaceProviders übergebene Puffer muss ausreichend sein, um alle Namespaceinformationen zu enthalten.

[out] lpnspBuffer

Ein Puffer, der mit WSANAMESPACE_INFO Strukturen gefüllt ist. Die zurückgegebenen Strukturen befinden sich nacheinander am Kopf des Puffers. Informationen zu variablen Größen, auf die von Zeigern in den Strukturen verwiesen wird, verweisen auf Positionen innerhalb des Puffers, die sich zwischen dem Ende der Strukturen mit fester Größe und dem Ende des Puffers befinden. Die Anzahl der eingegebenen Strukturen ist der Rückgabewert von WSAEnumNameSpaceProviders.

Rückgabewert

Die WSAEnumNameSpaceProviders-Funktion gibt die Anzahl WSANAMESPACE_INFO Strukturen zurück, die in lpnspBuffer kopiert wurden. Andernfalls wird der Wert SOCKET_ERROR zurückgegeben, und eine bestimmte Fehlernummer kann durch Aufrufen von WSAGetLastError abgerufen werden.

Fehlercode Bedeutung
WSAEFAULT
Der lpnspBuffer-Parameter war ein NULL-Zeiger oder die Pufferlänge lpdwBufferLength war zu klein, um alle relevanten WSANAMESPACE_INFO Strukturen und zugeordneten Informationen zu empfangen. Wenn dieser Fehler zurückgegeben wird, wird die erforderliche Pufferlänge im parameter lpdwBufferLength zurückgegeben.
WSANOTINITIALISIERT
Die WS2_32.DLL wurde nicht initialisiert. Die Anwendung muss zuerst WSAStartup aufrufen, bevor sie Windows Sockets-Funktionen aufruft.
WSA_NOT_ENOUGH_MEMORY
Zum Ausführen des Vorgangs war nicht genügend Arbeitsspeicher vorhanden.

Hinweise

Die WSAEnumNameSpaceProviders-Funktion gibt Informationen zu verfügbaren Namespaceanbietern im Puffer zurück, auf den der lpnspBuffer-Parameter verweist. Der zurückgegebene Puffer enthält ein Array von WSANAMESPACE_INFO Strukturen, die sich nacheinander am Kopf des Puffers befinden. Informationen zu variablen Größen, auf die durch Zeiger in den WSANAMESPACE_INFO Strukturen verwiesen wird, verweisen auf Positionen innerhalb des Puffers, die sich zwischen dem Ende der festen WSANAMESPACE_INFO Strukturen und dem Ende des Puffers befinden. Die Anzahl der WSANAMESPACE_INFO eingegebenen Strukturen wird vom
WSAEnumNameSpaceProviders-Funktion .

Jeder WSANAMESPACE_INFO Struktureintrag enthält die anbieterspezifischen Informationen zu dem Namespaceeintrag, der bei der Installation des Namespaceanbieters an die Funktionen WSCInstallNameSpace und WSCInstallNameSpace32 übergeben wurde.

Die WSAEnumNameSpaceProvidersEx-Funktion ist eine erweiterte Version der WSAEnumNameSpaceProviders-Funktion . Die WSCEnumNameSpaceProvidersEx32-Funktion ist eine erweiterte Version der WSAEnumNameSpaceProviders-Funktion , die Informationen zu verfügbaren 32-Bit-Namespaceanbietern zur Verwendung auf 64-Bit-Plattformen zurückgibt.

Beispielcode

Das folgende Beispiel veranschaulicht die Verwendung der WSAEnumNameSpaceProviders-Funktion zum Abrufen von Informationen zu verfügbaren Namespaceanbietern.
#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: Die WSAEnumNameSpaceProvidersW-Funktion wird für Windows Phone Store-Apps auf Windows Phone 8 und höher unterstützt.

Windows 8.1 und Windows Server 2012 R2: Die WSAEnumNameSpaceProvidersW-Funktion wird für Windows Store-Apps auf Windows 8.1, Windows Server 2012 R2 und höher unterstützt.

Hinweis

Der winsock2.h-Header definiert WSAEnumNameSpaceProviders als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 8.1, Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile winsock2.h
Bibliothek Ws2_32.lib
DLL Ws2_32.dll

Weitere Informationen

WSAEnumNameSpaceProvidersEx

WSAGetLastError

WSANAMESPACE_INFO

WSAStartup

WSCEnumNameSpaceProvidersEx32

WSCInstallNameSpace

WSCInstallNameSpaceEx

Winsock-Funktionen

Winsock-Referenz