Freigeben über


WSAEnumNameSpaceProvidersW-Funktion (winsock2.h)

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

Syntax

INT WSAAPI WSAEnumNameSpaceProvidersW(
  [in, out] LPDWORD              lpdwBufferLength,
  [out]     LPWSANAMESPACE_INFOW lpnspBuffer
);

Parameter

[in, out] lpdwBufferLength

Bei eingaben die Anzahl der im Puffer enthaltenen Bytes, auf die durch lpnspBufferverwiesen wurde. Bei der Ausgabe (wenn die Funktion fehlschlägt und der Fehler WSAEFAULTist), wird die mindeste Anzahl der Bytes, die für die lpnspBuffer übergeben werden, um alle angeforderten Informationen abzurufen. Der an WSAEnumNameSpaceProviders übergebene Puffer muss ausreichen, um alle Namespaceinformationen zu enthalten.

[out] lpnspBuffer

Ein Puffer, der mit WSANAMESPACE_INFO Strukturen gefüllt ist. Die zurückgegebenen Strukturen befinden sich aufeinander an der Kopfzeile des Puffers. Informationen mit variabler Größe, die von Zeigern in den Strukturen referenziert werden, verweisen auf Positionen innerhalb des Puffers, die sich zwischen dem Ende der strukturen fester Größe und dem Ende des Puffers befinden. Die Anzahl der ausgefüllten Strukturen ist der Rückgabewert WSAEnumNameSpaceProviders.

Rückgabewert

Die funktion WSAEnumNameSpaceProviders gibt die Anzahl der in lpnspBufferkopierten WSANAMESPACE_INFO Strukturen zurück. Andernfalls wird der Wert SOCKET_ERROR zurückgegeben, und eine bestimmte Fehlernummer kann durch Aufrufen WSAGetLastErrorabgerufen werden.

Fehlercode Bedeutung
WSAEFAULT-
Der lpnspBuffer Parameter war ein NULL Zeiger oder die Pufferlänge, lpdwBufferLength, zu klein war, 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 aufrufen.
WSA_NOT_ENOUGH_MEMORY
Zum Ausführen des Vorgangs war nicht genügend Arbeitsspeicher vorhanden.

Bemerkungen

Die WSAEnumNameSpaceProviders Funktion gibt Informationen zu verfügbaren Namespaceanbietern im Puffer zurück, auf die der lpnspBuffer-Parameter verweist. Der zurückgegebene Puffer enthält ein Array von WSANAMESPACE_INFO Strukturen, die sich aufeinander an der Kopfzeile des Puffers befinden. Informationen mit variabler Größe, auf die von Zeigern 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 ausgefüllten WSANAMESPACE_INFO Strukturen wird von der
WSAEnumNameSpaceProviders Funktion.

Jeder WSANAMESPACE_INFO Struktureintrag enthält die anbieterspezifischen Informationen zum Namespaceeintrag, der an die WSCInstallNameSpace übergeben wird, und WSCInstallNameSpace32 Funktionen, wenn der Namespaceanbieter installiert wurde.

Die funktion WSAEnumNameSpaceProvidersEx 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 für die Verwendung auf 64-Bit-Plattformen zurückgibt.

Beispielcode

Im folgenden Beispiel wird die Verwendung der WSAEnumNameSpaceProviders Funktion zum Abrufen von Informationen zu verfügbaren Namespaceanbietern veranschaulicht.
#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 unter 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 unter Windows 8.1, Windows Server 2012 R2 und höher unterstützt.

Anmerkung

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 Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 8.1, Windows Vista [Desktop-Apps | UWP-Apps]
mindestens unterstützte Server- Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform- Fenster
Header- winsock2.h
Library Ws2_32.lib
DLL- Ws2_32.dll

Siehe auch

WSAEnumNameSpaceProvidersEx

WSAGetLastError-

WSANAMESPACE_INFO

WSAStartup-

WSCEnumNameSpaceProvidersEx32-

WSCInstallNameSpace-

WSCInstallNameSpaceEx-

Winsock-Funktionen

Winsock Reference