共用方式為


NetShareEnum 函式 (lmshare.h)

擷取伺服器上每個共用資源的相關資訊。

您也可以使用 WNetEnumResource 函式來擷取資源資訊。 不過, WNetEnumResource 不會列舉隱藏共用或連線到共用的使用者。

語法

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
);

參數

[in] servername

字串的指標,指定要在其中執行函式之遠端伺服器的 DNS 或 NetBIOS 名稱。 如果此參數為 Null,則會使用本機電腦。

[in] level

指定資料的資訊層級。 此參數可以是下列其中一個值。

意義
0
傳回共用名稱。 bufptr參數指向SHARE_INFO_0結構的陣列。
1
傳回共用資源的相關資訊,包括資源的名稱和類型,以及與資源相關聯的批註。

bufptr參數指向SHARE_INFO_1結構的陣列。

2
傳回共用資源的相關資訊,包括資源的名稱、類型和許可權、密碼,以及連線數目。 bufptr參數指向SHARE_INFO_2結構的陣列。
502
傳回共用資源的相關資訊,包括資源的名稱、類型和許可權、連線數目和其他相關資訊。 bufptr參數指向SHARE_INFO_502結構的陣列。 不會傳回來自不同範圍的共用。 如需範圍的詳細資訊,請參閱 NetServerTransportAddEx 函式檔的一節。
503
傳回共用資源的相關資訊,包括資源的名稱、類型和許可權、連線數目和其他相關資訊。 bufptr參數指向SHARE_INFO_503結構的陣列。 會傳回來自所有範圍的共用。 如果此結構的 shi503_servername 成員為 「*」,則沒有設定的伺服器名稱, 且 NetShareEnum 函式會列舉所有未範圍名稱的共用。

Windows Server 2003 和 Windows XP: 不支援此資訊層級。

[out] bufptr

接收資料的緩衝區指標。 此資料的格式取決於 level 參數的值。

此緩衝區是由系統所配置,必須使用 NetApiBufferFree 函式釋放。 請注意,即使函式因 ERROR_MORE_DATA而失敗,您仍必須釋放緩衝區。

[in] prefmaxlen

指定所傳回資料的慣用最大長度,以位元組為單位。 如果您指定 MAX_PREFERRED_LENGTH,函式會配置資料所需的記憶體數量。 如果您在此參數中指定另一個值,它可以限制函式傳回的位元組數目。 如果緩衝區大小不足以保存所有專案,函式會 傳回ERROR_MORE_DATA。 如需詳細資訊,請參閱 網路管理功能緩衝區網路管理函式緩衝區長度

[out] entriesread

值指標,這個值會接收實際列舉的專案計數。

[out] totalentries

值的指標,這個值會接收可能已列舉的專案總數。 請注意,應用程式應該只將此值視為提示。

[in, out] resume_handle

值的指標,其中包含用來繼續現有共用搜尋的繼續控制碼。 第一次呼叫時,控制碼應該是零,後續呼叫則保持不變。 如果 resume_handleNull,則不會儲存任何繼續控制碼。

傳回值

如果函式成功,傳回值會 NERR_Success

如果函式失敗,則傳回值是系統錯誤碼。 如需錯誤碼的清單,請參閱 系統錯誤碼

備註

此函式僅適用于 SMB) 共用 (伺服器訊息區。 對於其他類型的共用,例如分散式檔案系統 (DFS) 或 WebDAV 共用,請使用支援所有類型的共用的 Windows 網路 (WNet) 函式

對於在本機登入電腦) 的互動式使用者 (使用者,不需要特殊群組成員資格才能執行 NetShareEnum 函式。 對於非互動式使用者,需要系統管理員、Power User、列印操作員或伺服器操作員群組成員資格,才能在層級 2、502 和 503 成功執行 NetShareEnum 函式。 層級 0 或層級 1 呼叫不需要特殊群組成員資格。

Windows Server 2022:對於非互動式使用者,需要系統管理員、存取控制協助操作員或伺服器操作員群組成員資格,才能在層級 2、502 和 503 成功執行NetShareEnum函式。

Windows Server 2003 和 Windows XP: 對於所有使用者,需要系統管理員、Power User、列印操作員或伺服器操作員群組成員資格,才能在層級 2 和 502 成功執行 NetShareEnum 函式。

若要擷取值,指出共用是否為 DFS 樹狀結構中的根磁片區,您必須呼叫 NetShareGetInfo 函式,並指定資訊層級 1005。

如果您是針對 Active Directory 進行程式設計,您可以呼叫特定 Active Directory 服務介面 (ADSI) 方法來達到相同的功能,方法是呼叫網路管理共用函式。 如需詳細資訊,請參閱 IADsFileShare

範例

下列程式碼範例示範如何使用 對 NetShareEnum 函式的呼叫,擷取伺服器上每個共用資源的相關資訊。 此範例會呼叫 NetShareEnum,並指定資訊層級 502 (SHARE_INFO_502) 。 如果呼叫成功,程式碼會迴圈查看專案,並列印每個共用的相關資訊。 此範例也會呼叫 IsValidSecurityDescriptor 函 式來驗證 shi502_security_descriptor 成員。 最後,程式碼範例會釋放配置給資訊緩衝區的記憶體。

#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;
}

需求

   
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
目標平台 Windows
標頭 lmshare.h (包含 Lm.h)
程式庫 Netapi32.lib
Dll Netapi32.dll

另請參閱

網路管理功能

網路管理概觀

網路共用函式

SHARE_INFO_0

SHARE_INFO_1

SHARE_INFO_2

SHARE_INFO_502

SHARE_INFO_503