Freigeben über


NetServerDiskEnum-Funktion (lmserver.h)

Die NetServerDiskEnum-Funktion ruft eine Liste der Datenträgerlaufwerke auf einem Server ab. Die Funktion gibt ein Array aus drei zeichenigen Zeichenfolgen zurück (ein Laufwerkbuchstabe, ein Doppelpunkt und ein abschließendes NULL-Zeichen).

Syntax

NET_API_STATUS NET_API_FUNCTION NetServerDiskEnum(
  [in]      LMSTR   servername,
  [in]      DWORD   level,
  [out]     LPBYTE  *bufptr,
  [in]      DWORD   prefmaxlen,
  [out]     LPDWORD entriesread,
  [out]     LPDWORD totalentries,
  [in, out] LPDWORD resume_handle
);

Parameter

[in] servername

Ein Zeiger auf eine Zeichenfolge, die den DNS- oder NetBIOS-Namen des Remoteservers angibt, auf dem die Funktion ausgeführt werden soll. Wenn dieser Parameter NULL ist, wird der lokale Computer verwendet.

[in] level

Die erforderliche Informationsebene. Der Wert 0 (null) ist die einzige gültige Ebene.

[out] bufptr

Ein Zeiger auf den Puffer, der die Daten empfängt. Die Daten sind ein Array aus dreistelligen Zeichenfolgen (ein Laufwerkbuchstabe, ein Doppelpunkt und ein abschließendes NULL-Zeichen). 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.

Hinweis Dieser Parameter wird derzeit ignoriert.
 

[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 Einträge empfängt, die von der aktuellen Position des Fortsetzens hätten aufgezählt werden können. Beachten Sie, dass Anwendungen diesen Wert nur als Hinweis betrachten sollten.

[in, out] resume_handle

Ein Zeiger auf einen Wert, der ein Resume-Handle enthält, das zum Fortsetzen einer vorhandenen Serverdatenträgersuche verwendet wird. Das Handle sollte beim ersten Aufruf null sein und für nachfolgende Aufrufe unverändert bleiben. Wenn der parameter resume_handle ein NULL-Zeiger ist, wird kein Resume-Handle gespeichert.

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 Beschreibung
ERROR_ACCESS_DENIED
Der Benutzer besitzt keinen Zugriff auf die angeforderten Informationen.
ERROR_INVALID_LEVEL
Der für den level-Parameter angegebene Wert ist ungültig.
ERROR_MORE_DATA
Weitere Einträge sind verfügbar. Geben Sie einen ausreichend großen Puffer an, um alle Einträge zu empfangen.
ERROR_NOT_ENOUGH_MEMORY
Nicht genügend Arbeitsspeicher ist verfügbar.
ERROR_NOT_SUPPORTED
Die Anforderung wird nicht unterstützt. Dieser Fehler wird zurückgegeben, wenn ein Remoteserver im Servername-Parameter angegeben wurde, der Remoteserver nur REMOTE-RPC-Aufrufe mit dem älteren Remotezugriffsprotokollmechanismus unterstützt, und diese Anforderung wird nicht unterstützt.

Hinweise

Nur Mitglieder der lokalen Gruppe Administratoren oder Serveroperatoren können die NetServerDiskEnum-Funktion auf einem Remotecomputer erfolgreich ausführen.

Wenn Sie für Active Directory programmieren, können Sie möglicherweise bestimmte ADSI-Methoden (Active Directory Service Interface) aufrufen, um die gleichen Ergebnisse zu erzielen, die Sie durch Aufrufen der Netzwerkverwaltungsserverfunktionen erzielen können. Weitere Informationen finden Sie in der Referenz zur IADsComputer-Schnittstelle .

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie die NetServerDiskEnum-Funktion aufgerufen wird, um eine Liste von Datenträgern auf einem Server abzurufen. Im Beispiel wird NetServerDiskEnum aufgerufen, wobei die Informationsebene 0 (erforderlich) angegeben wird. Wenn Einträge zurückgegeben werden müssen und der Benutzer Zugriff auf die Informationen hat, wird eine Liste der Laufwerke im Format einer dreistelligen Zeichenfolge ausgegeben: ein Laufwerkbuchstabe, ein Doppelpunkt und ein abschließendes NULL-Zeichen. Das Beispiel gibt auch die Gesamtzahl der verfügbaren Einträge und einen Hinweis auf die Anzahl der tatsächlich aufgelisteten Einträge aus. Schließlich gibt das Codebeispiel den für den Puffer zugeordneten Arbeitsspeicher frei.

#ifndef UNICODE
#define UNICODE
#endif

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

#pragma comment(lib, "netapi32.lib")

int wmain(int argc, wchar_t *argv[])
{
   const int ENTRY_SIZE = 3; // Drive letter, colon, NULL
   LPTSTR pBuf = NULL;
   DWORD dwLevel = 0; // level must be zero
   DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
   DWORD dwEntriesRead = 0;
   DWORD dwTotalEntries = 0;
   NET_API_STATUS nStatus;
   LPWSTR pszServerName = NULL;

   if (argc > 2)
   {
      fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]);
      exit(1);
   }
   // The server is not the default local computer.
   //
   if (argc == 2)
      pszServerName = (LPTSTR) argv[1];
   //
   // Call the NetServerDiskEnum function.
   //
   nStatus = NetServerDiskEnum(pszServerName,
                               dwLevel,
                               (LPBYTE *) &pBuf,
                               dwPrefMaxLen,
                               &dwEntriesRead,
                               &dwTotalEntries,
                               NULL);
   //
   // If the call succeeds,
   //
   if (nStatus == NERR_Success)
   {
      LPTSTR pTmpBuf;

      if ((pTmpBuf = pBuf) != NULL)
      {
         DWORD i;
         DWORD dwTotalCount = 0;
         //
         // Loop through the entries.
         //
         for (i = 0; i < dwEntriesRead; i++)
         {
            assert(pTmpBuf != NULL);

            if (pTmpBuf == NULL)
            {
               // On a remote computer, only members of the
               //  Administrators or the Server Operators 
               //  local group can execute NetServerDiskEnum.
               //
               fprintf(stderr, "An access violation has occurred\n");
               break;
            }
            //
            // Print drive letter, colon, NULL for each drive;
            //   the number of entries actually enumerated; and
            //   the total number of entries available.
            //
            fwprintf(stdout, L"\tDisk: %S\n", pTmpBuf);

            pTmpBuf += ENTRY_SIZE;
            dwTotalCount++;
         }

         fprintf(stderr, "\nEntries enumerated: %d\n", dwTotalCount);
      }
   }
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);

   //
   // Free the allocated buffer.
   //
   if (pBuf != NULL)
      NetApiBufferFree(pBuf);

   return 0;
}

Anforderungen

   
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

IADsComputer

NetServerEnum

Netzwerkverwaltungsfunktionen

Übersicht über die Netzwerkverwaltung

Serverfunktionen