다음을 통해 공유


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

데이터를 수신하는 버퍼에 대한 포인터입니다. 이 데이터의 형식은 수준 매개 변수의 값에 따라 달라집니다.

이 버퍼는 시스템에서 할당되며 NetApiBufferFree 함수를 사용하여 해제해야 합니다. 함수가 ERROR_MORE_DATA 실패하더라도 버퍼를 해제해야 합니다.

[in] prefmaxlen

반환된 데이터의 기본 설정 최대 길이(바이트)를 지정합니다. MAX_PREFERRED_LENGTH 지정하는 경우 함수는 데이터에 필요한 메모리 양을 할당합니다. 이 매개 변수에 다른 값을 지정하면 함수가 반환하는 바이트 수를 제한할 수 있습니다. 버퍼 크기가 모든 항목을 보유하기에 충분하지 않으면 함수는 ERROR_MORE_DATA 반환합니다. 자세한 내용은 네트워크 관리 함수 버퍼 및 네트워크관리 함수 버퍼 길이를 참조하세요.

[out] entriesread

실제로 열거된 요소 수를 받는 값에 대한 포인터입니다.

[out] totalentries

열거될 수 있는 총 항목 수를 받는 값에 대한 포인터입니다. 애플리케이션은 이 값을 힌트로만 고려해야 합니다.

[in, out] resume_handle

기존 공유 검색을 계속하는 데 사용되는 다시 시작 핸들이 포함된 값에 대한 포인터입니다. 핸들은 첫 번째 호출에서 0이어야 하며 후속 호출의 경우 변경되지 않은 상태로 유지되어야 합니다. resume_handleNULL이면 다시 시작 핸들이 저장되지 않습니다.

반환 값

함수가 성공하면 반환 값이 NERR_Success.

함수가 실패하면 반환 값은 시스템 오류 코드입니다. 오류 코드 목록은 시스템 오류 코드를 참조하세요.

설명

이 함수는 SMB(서버 메시지 블록) 공유에만 적용됩니다. DFS(분산 파일 시스템) 또는 WebDAV 공유와 같은 다른 유형의 공유의 경우 모든 유형의 공유 를 지원하는 WNet(Windows 네트워킹) 함수를 사용합니다.

대화형 사용자(컴퓨터에 로컬로 로그온한 사용자)의 경우 NetShareEnum 함수를 실행하기 위해 특별한 그룹 멤버 자격이 필요하지 않습니다. 비대화형 사용자의 경우 수준 2, 502 및 503에서 NetShareEnum 함수를 성공적으로 실행하려면 관리자, 전원 사용자, 인쇄 연산자 또는 서버 운영자 그룹 멤버 자격이 필요합니다. 수준 0 또는 수준 1 호출에는 특별한 그룹 멤버 자격이 필요하지 않습니다.

Windows Server 2022: 비대화형 사용자의 경우 수준 2, 502 및 503에서 NetShareEnum 함수를 성공적으로 실행하려면 관리자, Access Control 지원 운영자 또는 서버 운영자 그룹 멤버 자격이 필요합니다.

Windows Server 2003 및 Windows XP: 수준 2 및 502에서 NetShareEnum 함수를 성공적으로 실행하려면 모든 사용자, 관리자, 전원 사용자, 인쇄 연산자 또는 서버 운영자 그룹 멤버 자격이 필요합니다.

공유가 DFS 트리 구조의 루트 볼륨인지 여부를 나타내는 값을 검색하려면 NetShareGetInfo 함수를 호출하고 정보 수준 1005를 지정해야 합니다.

Active Directory를 프로그래밍하는 경우 특정 ADSI(Active Directory Service Interface) 메서드를 호출하여 네트워크 관리 공유 함수를 호출하여 달성할 수 있는 동일한 기능을 달성할 수 있습니다. 자세한 내용은 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