Freigeben über


NetServerEnum-Funktion (lmserver.h)

Die NetServerEnum-Funktion listet alle Server des angegebenen Typs auf, die in einer Domäne sichtbar sind.

Syntax

NET_API_STATUS NET_API_FUNCTION NetServerEnum(
  [in, optional]      LMCSTR  servername,
  [in]                DWORD   level,
  [out]               LPBYTE  *bufptr,
  [in]                DWORD   prefmaxlen,
  [out]               LPDWORD entriesread,
  [out]               LPDWORD totalentries,
  [in]                DWORD   servertype,
  [in, optional]      LMCSTR  domain,
  [in, out, optional] LPDWORD resume_handle
);

Parameter

[in, optional] servername

Reserviert; muss NULL sein.

[in] level

Die Informationsebene der angeforderten Daten. Dieser Parameter kann einen der folgenden Werte annehmen.

Wert Bedeutung
100
Gibt Servernamen und Plattforminformationen zurück. Der bufptr-Parameter verweist auf ein Array von SERVER_INFO_100 Strukturen.
101
Gibt Servernamen, Typen und zugeordnete Daten zurück. Der bufptr-Parameter verweist auf ein Array von SERVER_INFO_101 Strukturen.

[out] bufptr

Ein Zeiger auf den Puffer, der die Daten empfängt. Das Format dieser Daten hängt vom Wert des level-Parameters ab. Dieser Puffer wird vom System zugeordnet und muss mithilfe der NetApiBufferFree-Funktion freigegeben werden. Beachten Sie, dass Sie den Puffer auch dann freigeben müssen, wenn die Funktion mit ERROR_MORE_DATA fehlschlägt.

[in] prefmaxlen

Die bevorzugte maximale Länge der zurückgegebenen Daten in Bytes. Wenn Sie MAX_PREFERRED_LENGTH angeben, ordnet die Funktion den für die Daten erforderlichen Arbeitsspeicher zu. Wenn Sie in diesem Parameter einen anderen Wert angeben, kann er die Anzahl der Bytes einschränken, die die Funktion zurückgibt. Wenn die Puffergröße nicht ausreicht, um alle Einträge aufzunehmen, gibt die Funktion ERROR_MORE_DATA zurück. Weitere Informationen finden Sie unter Netzwerkverwaltungsfunktionspuffer und Netzwerkverwaltungsfunktionspufferlängen.

[out] entriesread

Ein Zeiger auf einen Wert, der die Anzahl der tatsächlich aufgezählten Elemente empfängt.

[out] totalentries

Ein Zeiger auf einen Wert, der die Gesamtzahl der sichtbaren Server und Arbeitsstationen im Netzwerk empfängt. Beachten Sie, dass Anwendungen diesen Wert nur als Hinweis betrachten sollten.

[in] servertype

Ein -Wert, der die Servereinträge filtert, die von der Enumeration zurückgegeben werden sollen. Dieser Parameter kann eine Kombination der folgenden Werte sein, die in der Lmserver.h-Headerdatei definiert sind.

Wert Bedeutung
SV_TYPE_WORKSTATION
0x00000001
Alle Arbeitsstationen.
SV_TYPE_SERVER
0x00000002
Alle Computer, auf denen der Serverdienst ausgeführt wird.
SV_TYPE_SQLSERVER
0x00000004
Alle Server, auf denen eine instance von Microsoft SQL Server ausgeführt wird.
SV_TYPE_DOMAIN_CTRL
0x00000008
Ein Server, bei dem es sich um einen primären Domänencontroller handelt.
SV_TYPE_DOMAIN_BAKCTRL
0x00000010
Alle Server, bei denen es sich um einen Sicherungsdomänencontroller handelt.
SV_TYPE_TIME_SOURCE
0x00000020
Alle Server, auf denen der Timesource-Dienst ausgeführt wird.
SV_TYPE_AFP
0x00000040
Alle Server, auf denen der AFP-Dateidienst (Apple Filing Protocol) ausgeführt wird.
SV_TYPE_NOVELL
0x00000080
Alle Server, bei denen es sich um einen Novell-Server handelt.
SV_TYPE_DOMAIN_MEMBER
0x00000100
Alle Computer, die LAN Manager 2.x-Domänenmitglied sind.
SV_TYPE_PRINTQ_SERVER
0x00000200
Alle Computer, die eine Druckwarteschlange gemeinsam verwenden.
SV_TYPE_DIALIN_SERVER
0x00000400
Alle Server, auf denen ein Einwahldienst ausgeführt wird.
SV_TYPE_XENIX_SERVER
0x00000800
Alle Server, bei denen es sich um einen Xenix-Server handelt.
SV_TYPE_SERVER_UNIX
0x00000800
Jeder Server, der ein UNIX-Server ist. Dies entspricht dem SV_TYPE_XENIX_SERVER.
SV_TYPE_NT
0x00001000
Eine Arbeitsstation oder ein Server.
SV_TYPE_WFW
0x00002000
Alle Computer, auf denen Windows für Arbeitsgruppen ausgeführt wird.
SV_TYPE_SERVER_MFPN
0x00004000
Alle Server, auf denen der Microsoft File and Print for NetWare-Dienst ausgeführt wird.
SV_TYPE_SERVER_NT
0x00008000
Alle Server, die kein Domänencontroller sind.
SV_TYPE_POTENTIAL_BROWSER
0x00010000
Jeder Computer, auf dem der Browserdienst ausgeführt werden kann.
SV_TYPE_BACKUP_BROWSER
0x00020000
Ein Computer, auf dem ein Browserdienst als Sicherung ausgeführt wird.
SV_TYPE_MASTER_BROWSER
0x00040000
Ein Computer, auf dem der master-Browserdienst ausgeführt wird.
SV_TYPE_DOMAIN_MASTER
0x00080000
Ein Computer, auf dem die Domäne master Browser ausgeführt wird.
SV_TYPE_SERVER_OSF
0x00100000
Ein Computer, auf dem OSF/1 ausgeführt wird.
SV_TYPE_SERVER_VMS
0x00200000
Ein Computer, auf dem das Open Virtual Memory System (VMS) ausgeführt wird.
SV_TYPE_WINDOWS
0x00400000
Ein Computer, auf dem Windows ausgeführt wird.
SV_TYPE_DFS
0x00800000
Ein Computer, der der Stamm der DFS-Struktur (Distributed File System) ist.
SV_TYPE_CLUSTER_NT
0x01000000
Servercluster, die in der Domäne verfügbar sind.
SV_TYPE_TERMINALSERVER
0x02000000
Ein Server, auf dem der Terminalserverdienst ausgeführt wird.
SV_TYPE_CLUSTER_VS_NT
0x04000000
Virtuelle Clusterserver, die in der Domäne verfügbar sind.

Windows 2000: Dieser Wert wird nicht unterstützt.

SV_TYPE_DCE
0x10000000
Ein Computer, auf dem IBM Directory and Security Services (DSS) oder eine entsprechende Instanz ausgeführt wird.
SV_TYPE_ALTERNATE_XPORT
0x20000000
Ein Computer, der über einen alternativen Transport verfügt.
SV_TYPE_LOCAL_LIST_ONLY
0x40000000
Alle Computer, die vom Browser in einer Liste verwaltet werden. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
SV_TYPE_DOMAIN_ENUM
0x80000000
Die primäre Domäne.
SV_TYPE_ALL
0xFFFFFFFF
Alle Server. Dies ist ein Komfort, der alle möglichen Server zurückgibt.

[in, optional] domain

Ein Zeiger auf eine konstante Zeichenfolge, die den Namen der Domäne angibt, für die eine Liste von Servern zurückgegeben werden soll. Der Domänenname muss ein NetBIOS-Domänenname sein (z. B. microsoft). Die NetServerEnum-Funktion unterstützt keine DNS-Namen (z. B. microsoft.com).

Wenn dieser Parameter NULL ist, wird die primäre Domäne impliziert.

[in, out, optional] resume_handle

Reserviert; muss auf 0 festgelegt werden.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert NERR_Success.

Wenn die Funktion fehlschlägt, kann der Rückgabewert einer der folgenden Fehlercodes sein:

Rückgabecode/-wert BESCHREIBUNG
ERROR_ACCESS_DENIED
5
Der Zugriff wurde verweigert.
ERROR_INVALID_PARAMETER
87
„Der Parameter ist falsch.“
ERROR_MORE_DATA
234
Weitere Einträge sind verfügbar. Geben Sie einen ausreichend großen Puffer an, um alle Einträge zu empfangen.
ERROR_NO_BROWSER_SERVERS_FOUND
6118
Es wurden keine Browserserver gefunden.
ERROR_NOT_SUPPORTED
50
Die Anforderung wird nicht unterstützt.
NERR_RemoteErr
2127
Es ist ein Remotefehler aufgetreten, bei dem keine Daten vom Server zurückgegeben wurden.
NERR_ServerNotStarted
2114
Der Serverdienst wurde nicht gestartet.
NERR_ServiceNotInstalled
2184
Der Dienst wurde nicht gestartet.
NERR_WkstaNotStarted
2138
Der Arbeitsstationsdienst wurde nicht gestartet. Der lokale Arbeitsstationsdienst wird verwendet, um mit einem Remoteserver auf Downlevel zu kommunizieren.

Hinweise

Die NetServerEnum-Funktion wird verwendet, um alle Server des angegebenen Typs aufzulisten, die in einer Domäne sichtbar sind. Beispielsweise kann eine Anwendung NetServerEnum aufrufen, um nur alle Domänencontroller oder alle Server aufzulisten, auf denen nur Instanzen von SQL Server ausgeführt werden.

Eine Anwendung kombiniert die Bitmasken für verschiedene Servertypen im Servertype-Parameter , um mehrere Typen aufzulisten. Beispielsweise ein Wert von SV_TYPE_WORKSTATION | SVTYPE_SERVER (0x00000003) kombiniert die Bitmasken für SV_TYPE_WORKSTATION (0x00000001) und SV_TYPE_SERVER (0x00000002).

Wenn Sie weitere Informationen für einen bestimmten Server benötigen, rufen Sie die WNetEnumResource-Funktion auf.

Für die erfolgreiche Ausführung der NetServerEnum-Funktion ist keine spezielle Gruppenmitgliedschaft erforderlich.

Wenn Sie den Wert SV_TYPE_LOCAL_LIST_ONLY angeben, gibt die NetServerEnum-Funktion die Liste der Server zurück, die der Browser intern verwaltet. Dies hat nur eine Bedeutung für den master Browser (oder auf einem Computer, der in der Vergangenheit der master Browser war). Der master Browser ist der Computer, der derzeit über Die Rechte verfügt, um zu bestimmen, welche Computer Server oder Arbeitsstationen im Netzwerk sein können.

Wenn keine Server gefunden werden, die mit den im servertype-Parameter angegebenen Typen übereinstimmen, gibt die NetServerEnum-Funktion den bufptr-Parameter als NULL zurück, und DWORD-Werte, auf die von den Parametern "entriesread " und "totalentries " verwiesen werden, werden auf Null festgelegt.

Die NetServerEnum-Funktion hängt vom installierten und ausgeführten Browserdienst ab. Wenn keine Browserserver gefunden werden, schlägt NetServerEnum mit ERROR_NO_BROWSER_SERVERS_FOUND fehl.

Wenn Sie für Active Directory programmieren, können Sie möglicherweise bestimmte ADSI-Methoden (Active Directory Service Interface) aufrufen, um dieselbe Funktion zu erreichen, die Sie durch aufrufen der Netzwerkverwaltungsserverfunktionen erreichen können. Weitere Informationen finden Sie unter IADsComputer.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie alle Server aufgelistet werden, die in einer Domäne mit einem Aufruf der NetServerEnum-Funktion sichtbar sind. Im Beispiel wird NetServerEnum aufgerufen, wobei die Informationsebene 101 ( SERVER_INFO_101) angegeben wird. Wenn Server gefunden werden, durchläuft der Beispielcode die Einträge und gibt die abgerufenen Daten aus. Wenn der Server ein Domänencontroller ist, wird der Server entweder als primärer Domänencontroller (PDC) oder als Sicherungsdomänencontroller (Backup Domain Controller, BDC) identifiziert. Das Beispiel gibt auch die Gesamtzahl der verfügbaren Einträge und einen Hinweis auf die Anzahl der tatsächlich aufgezählten Einträge aus, und warnt den Benutzer, wenn nicht alle Einträge aufgelistet wurden. Schließlich gibt das Beispiel den für den Informationspuffer zugewiesenen Arbeitsspeicher frei.

#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")

#include <stdio.h>
#include <assert.h>
#include <windows.h>
#include <lm.h>

int wmain(int argc, wchar_t * argv[])
{
    LPSERVER_INFO_101 pBuf = NULL;
    LPSERVER_INFO_101 pTmpBuf;
    DWORD dwLevel = 101;
    DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
    DWORD dwEntriesRead = 0;
    DWORD dwTotalEntries = 0;
    DWORD dwTotalCount = 0;
    DWORD dwServerType = SV_TYPE_SERVER;        // all servers
    DWORD dwResumeHandle = 0;
    NET_API_STATUS nStatus;
    LPWSTR pszServerName = NULL;
    LPWSTR pszDomainName = NULL;
    DWORD i;

    if (argc > 2) 
    {
        fwprintf(stderr, L"Usage: %s [DomainName]\n", argv[0]);
        exit(1);
    }
    // The request is not for the primary domain.
    //
    if (argc == 2)
        pszDomainName = argv[1];
    //
    // Call the NetServerEnum function to retrieve information
    //  for all servers, specifying information level 101.
    //
    nStatus = NetServerEnum(pszServerName,
                            dwLevel,
                            (LPBYTE *) & pBuf,
                            dwPrefMaxLen,
                            &dwEntriesRead,
                            &dwTotalEntries,
                            dwServerType, 
                            pszDomainName, 
                            &dwResumeHandle);
    //
    // If the call succeeds,
    //
    if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) {
        if ((pTmpBuf = pBuf) != NULL) {
            //
            // Loop through the entries and 
            //  print the data for all server types.
            //
            for (i = 0; i < dwEntriesRead; i++) {
                assert(pTmpBuf != NULL);

                if (pTmpBuf == NULL) {
                    fprintf(stderr, "An access violation has occurred\n");
                    break;
                }

                printf("\tPlatform: %d\n", pTmpBuf->sv101_platform_id);
                wprintf(L"\tName:     %s\n", pTmpBuf->sv101_name);
                printf("\tVersion:  %d.%d\n",
                       pTmpBuf->sv101_version_major,
                       pTmpBuf->sv101_version_minor);
                printf("\tType:     %d", pTmpBuf->sv101_type);
                //
                // Check to see if the server is a domain controller;
                //  if so, identify it as a PDC or a BDC.
                //
                if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_CTRL)
                    wprintf(L" (PDC)");
                else if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_BAKCTRL)
                    wprintf(L" (BDC)");

                printf("\n");
                //
                // Also print the comment associated with the server.
                //
                wprintf(L"\tComment:  %s\n\n", pTmpBuf->sv101_comment);

                pTmpBuf++;
                dwTotalCount++;
            }
            // Display a warning if all available entries were
            //  not enumerated, print the number actually 
            //  enumerated, and the total number available.

            if (nStatus == ERROR_MORE_DATA) {
                fprintf(stderr, "\nMore entries available!!!\n");
                fprintf(stderr, "Total entries: %d", dwTotalEntries);
            }

            printf("\nEntries enumerated: %d\n", dwTotalCount);

        } else {
            printf("No servers were found\n");
            printf("The buffer (bufptr) returned was NULL\n");
            printf("  entriesread: %d\n", dwEntriesRead);
            printf("  totalentries: %d\n", dwEntriesRead);
        }

    } else
        fprintf(stderr, "NetServerEnum failed with error: %d\n", nStatus);
    //
    // Free the allocated buffer.
    //
    if (pBuf != NULL)
        NetApiBufferFree(pBuf);

    return 0;
}


Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile lmserver.h (lm.h einschließen)
Bibliothek Netapi32.lib
DLL Netapi32.dll

Weitere Informationen

NetQueryDisplayInformation

NetServerDiskEnum

Netzwerkverwaltungsfunktionen

Übersicht über die Netzwerkverwaltung

SERVER_INFO_100

SERVER_INFO_101

Serverfunktionen