Share via


Funzione NetShareEnum (lmshare.h)

Recupera informazioni su ogni risorsa condivisa in un server.

È anche possibile usare la funzione WNetEnumResource per recuperare le informazioni sulle risorse. Tuttavia, WNetEnumResource non enumera condivisioni nascoste o utenti connessi a una condivisione.

Sintassi

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

Parametri

[in] servername

Puntatore a una stringa che specifica il nome DNS o NetBIOS del server remoto in cui eseguire la funzione. Se questo parametro è NULL, viene usato il computer locale.

[in] level

Specifica il livello di informazioni dei dati. Questo parametro può avere uno dei valori seguenti.

Valore Significato
0
Restituire nomi di condivisione. Il parametro bufptr punta a una matrice di strutture SHARE_INFO_0 .
1
Restituisce informazioni sulle risorse condivise, tra cui il nome e il tipo della risorsa e un commento associato alla risorsa.

Il parametro bufptr punta a una matrice di strutture SHARE_INFO_1 .

2
Restituisce informazioni sulle risorse condivise, incluso il nome della risorsa, il tipo e le autorizzazioni, la password e il numero di connessioni. Il parametro bufptr punta a una matrice di strutture SHARE_INFO_2 .
502
Restituisce informazioni sulle risorse condivise, incluso il nome della risorsa, il tipo e le autorizzazioni, il numero di connessioni e altre informazioni pertinenti. Il parametro bufptr punta a una matrice di strutture SHARE_INFO_502 . Le condivisioni di ambiti diversi non vengono restituite. Per altre informazioni sull'ambito, vedere la sezione Osservazioni della documentazione per la funzione NetServerTransportAddEx .
503
Restituisce informazioni sulle risorse condivise, incluso il nome della risorsa, il tipo e le autorizzazioni, il numero di connessioni e altre informazioni pertinenti. Il parametro bufptr punta a una matrice di strutture SHARE_INFO_503 . Le condivisioni di tutti gli ambiti vengono restituite. Se il membro shi503_servername di questa struttura è "*", non esiste alcun nome del server configurato e la funzione NetShareEnum enumera le condivisioni per tutti i nomi non ascoped.

Windows Server 2003 e Windows XP: Questo livello di informazioni non è supportato.

[out] bufptr

Puntatore al buffer che riceve i dati. Il formato di questi dati dipende dal valore del parametro di livello .

Questo buffer viene allocato dal sistema e deve essere liberato usando la funzione NetApiBufferFree . Si noti che è necessario liberare il buffer anche se la funzione ha esito negativo con ERROR_MORE_DATA.

[in] prefmaxlen

Specifica la lunghezza massima preferita dei dati restituiti, in byte. Se si specifica MAX_PREFERRED_LENGTH, la funzione alloca la quantità di memoria necessaria per i dati. Se si specifica un altro valore in questo parametro, può limitare il numero di byte restituiti dalla funzione. Se le dimensioni del buffer non sono sufficienti per contenere tutte le voci, la funzione restituisce ERROR_MORE_DATA. Per altre informazioni, vedere Buffer delle funzioni di gestione della rete e lunghezze del buffer delle funzioni di gestione della rete.

[out] entriesread

Puntatore a un valore che riceve il conteggio degli elementi effettivamente enumerati.

[out] totalentries

Puntatore a un valore che riceve il numero totale di voci che potrebbero essere state enumerate. Si noti che le applicazioni devono considerare questo valore solo come hint.

[in, out] resume_handle

Puntatore a un valore contenente un handle di ripresa usato per continuare una ricerca di condivisione esistente. L'handle deve essere zero nella prima chiamata e lasciato invariato per le chiamate successive. Se resume_handle è NULL, non viene archiviato alcun handle di ripresa.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è NERR_Success.

Se la funzione ha esito negativo, il valore restituito è un codice di errore di sistema. Per un elenco di codici di errore, vedere Codici di errore di sistema.

Commenti

Questa funzione si applica solo alle condivisioni SMB (Server Message Block). Per altri tipi di condivisioni, ad esempio File System distribuito (DFS) o condivisioni WebDAV, usare funzioni di Rete Windows (WNet), che supportano tutti i tipi di condivisioni.

Per gli utenti interattivi (utenti connessi in locale al computer), non è necessaria alcuna appartenenza speciale al gruppo per eseguire la funzione NetShareEnum . Per gli utenti non interattivi, l'amministratore, l'operatore di stampa o l'appartenenza al gruppo di operatori server è necessario per eseguire correttamente la funzione NetShareEnum a livelli 2, 502 e 503. Per le chiamate di livello 0 o livello 1 non è necessaria alcuna appartenenza speciale al gruppo.

Windows Server 2022: Per utenti non interattivi, amministratore, Controllo di accesso operatori di assistenza o appartenenza al gruppo di operatori server è necessario eseguire correttamente la funzione NetShareEnum a livelli 2, 502 e 503.

Windows Server 2003 e Windows XP: Per tutti gli utenti, amministratore, Power User, Operatore di stampa o appartenenza al gruppo di operatori server è necessario eseguire correttamente la funzione NetShareEnum a livelli 2 e 502.

Per recuperare un valore che indica se una condivisione è il volume radice in una struttura ad albero DFS, è necessario chiamare la funzione NetShareGetInfo e specificare il livello di informazioni 1005.

Se si sta programmando per Active Directory, è possibile chiamare determinati metodi di Active Directory Service Interface (ADSI) per ottenere la stessa funzionalità che è possibile ottenere chiamando le funzioni di condivisione di gestione di rete. Per altre informazioni, vedere IADsFileShare.

Esempio

L'esempio di codice seguente illustra come recuperare informazioni su ogni risorsa condivisa in un server usando una chiamata alla funzione NetShareEnum . L'esempio chiama NetShareEnum, specificando il livello di informazioni 502 (SHARE_INFO_502). Se la chiamata ha esito positivo, il codice scorre le voci e stampa le informazioni su ogni condivisione. L'esempio chiama anche la funzione IsValidSecurityDescriptor per convalidare il membro shi502_security_descriptor . Infine, l'esempio di codice libera la memoria allocata per il buffer delle informazioni.

#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <stdio.h>
#include <lm.h>

#pragma comment(lib, "Netapi32.lib")
#pragma comment(lib, "Advapi32.lib")

void wmain( int argc, TCHAR *lpszArgv[ ])
{
   PSHARE_INFO_502 BufPtr,p;
   NET_API_STATUS res;
   LPTSTR   lpszServer = NULL;
   DWORD er=0,tr=0,resume=0, i;

   switch(argc)
   {
   case 2:
      lpszServer = lpszArgv[1];
      break;
   default:
      printf("Usage: NetShareEnum <servername>\n");
      return;
   }
   //
   // Print a report header.
   //
   printf("Share:              Local Path:                   Uses:   Descriptor:\n");
   printf("---------------------------------------------------------------------\n");
   //
   // Call the NetShareEnum function; specify level 502.
   //
   do // begin do
   {
      res = NetShareEnum (lpszServer, 502, (LPBYTE *) &BufPtr, MAX_PREFERRED_LENGTH, &er, &tr, &resume);
      //
      // If the call succeeds,
      //
      if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
      {
         p=BufPtr;
         //
         // Loop through the entries;
         //  print retrieved data.
         //
         for(i=1;i<=er;i++)
         {
            printf("%-20S%-30S%-8u",p->shi502_netname, p->shi502_path, p->shi502_current_uses);
            //
            // Validate the value of the 
            //  shi502_security_descriptor member.
            //
            if (IsValidSecurityDescriptor(p->shi502_security_descriptor))
               printf("Yes\n");
            else
               printf("No\n");
            p++;
         }
         //
         // Free the allocated buffer.
         //
         NetApiBufferFree(BufPtr);
      }
      else 
         printf("Error: %ld\n",res);
   }
   // Continue to call NetShareEnum while 
   //  there are more entries. 
   // 
   while (res==ERROR_MORE_DATA); // end do
   return;
}

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione lmshare.h (includere Lm.h)
Libreria Netapi32.lib
DLL Netapi32.dll

Vedi anche

Funzioni di gestione della rete

Panoramica sulla gestione della rete

Funzioni di condivisione di rete

SHARE_INFO_0

SHARE_INFO_1

SHARE_INFO_2

SHARE_INFO_502

SHARE_INFO_503