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.
[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 |
---|---|
|
Der Benutzer besitzt keinen Zugriff auf die angeforderten Informationen. |
|
Der für den level-Parameter angegebene Wert ist ungültig. |
|
Weitere Einträge sind verfügbar. Geben Sie einen ausreichend großen Puffer an, um alle Einträge zu empfangen. |
|
Nicht genügend Arbeitsspeicher ist verfügbar. |
|
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 |