다음을 통해 공유


NetUserGetGroups 함수(lmaccess.h)

NetUserGetGroups 함수는 지정된 사용자가 속한 전역 그룹 목록을 검색합니다.

구문

NET_API_STATUS NET_API_FUNCTION NetUserGetGroups(
  [in]  LPCWSTR servername,
  [in]  LPCWSTR username,
  [in]  DWORD   level,
  [out] LPBYTE  *bufptr,
  [in]  DWORD   prefmaxlen,
  [out] LPDWORD entriesread,
  [out] LPDWORD totalentries
);

매개 변수

[in] servername

함수를 실행할 원격 서버의 DNS 또는 NetBIOS 이름을 지정하는 상수 문자열에 대한 포인터입니다. 이 매개 변수가 NULL이면 로컬 컴퓨터가 사용됩니다.

[in] username

각 그룹 계정에서 검색할 사용자의 이름을 지정하는 상수 문자열에 대한 포인터입니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

[in] level

요청된 데이터의 정보 수준입니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
0
사용자가 속한 전역 그룹의 이름을 반환합니다. bufptr 매개 변수는 GROUP_USERS_INFO_0 구조체의 배열을 가리킵니다.
1
사용자가 특성과 함께 속한 전역 그룹의 이름을 반환합니다. bufptr 매개 변수는 GROUP_USERS_INFO_1 구조체의 배열을 가리킵니다.

[out] bufptr

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

[in] prefmaxlen

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

[out] entriesread

실제로 검색된 요소 수를 수신하는 값에 대한 포인터입니다.

[out] totalentries

검색할 수 있는 총 항목 수를 수신하는 값에 대한 포인터입니다.

반환 값

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

함수가 실패하면 반환 값은 다음 오류 코드 중 하나일 수 있습니다.

반환 코드 설명
ERROR_ACCESS_DENIED
사용자에게 요청된 정보에 대한 액세스 권한이 없습니다.
ERROR_BAD_NETPATH
네트워크 경로를 찾을 수 없습니다. 서버 이름 매개 변수를 찾을 수 없는 경우 이 오류가 반환됩니다.
ERROR_INVALID_LEVEL
시스템 호출 수준이 올바르지 않습니다. 수준 매개 변수가 0 또는 1 이외의 값으로 지정된 경우 이 오류가 반환됩니다.
ERROR_INVALID_NAME
이름 구문이 잘못되었습니다. 이 오류는 servername 매개 변수에 선행 또는 후행 공백이 있거나 잘못된 문자가 포함된 경우 반환됩니다.
ERROR_MORE_DATA
더 많은 항목을 사용할 수 있습니다. 모든 항목을 받을 수 있을 만큼 큰 버퍼를 지정합니다.
ERROR_NOT_ENOUGH_MEMORY
메모리가 부족하여 작업을 완료할 수 있었습니다.
NERR_InternalError
내부 오류가 발생했습니다.
NERR_UserNotFound
사용자를 찾을 수 없습니다. 사용자 이름을 찾을 수 없는 경우 이 오류가 반환됩니다.

설명

Active Directory를 프로그래밍하는 경우 특정 ADSI(Active Directory Service Interface) 메서드를 호출하여 네트워크 관리 사용자 함수를 호출하여 달성할 수 있는 동일한 기능을 달성할 수 있습니다. 자세한 내용은 IADsUserIADsComputer를 참조하세요.

Active Directory를 실행하는 도메인 컨트롤러에서 이 함수를 호출하는 경우 보안 개체에 대한 ACL(액세스 제어 목록)에 따라 액세스가 허용되거나 거부됩니다. 기본 ACL은 "Pre-Windows 2000 호환 액세스" 그룹의 모든 인증된 사용자와 구성원이 정보를 볼 수 있도록 허용합니다. 멤버 서버 또는 워크스테이션에서 이 함수를 호출하는 경우 인증된 모든 사용자가 정보를 볼 수 있습니다. 이러한 플랫폼에서 익명 액세스 및 익명 액세스를 제한하는 방법에 대한 자세한 내용은 네트워크 관리 함수에 대한 보안 요구 사항을 참조하세요. ACL, ACL 및 액세스 토큰에 대한 자세한 내용은 Access Control 모델을 참조하세요.

User 개체의 보안 설명자는 이 함수에 대한 액세스 검사 수행하는 데 사용됩니다.

사용자가 속한 로컬 그룹 목록을 검색하려면 NetUserGetLocalGroups 함수를 호출할 수 있습니다. 네트워크 그룹은 별도의 Windows NT 시스템 그룹과 다릅니다.

사용자 계정 이름은 20자로 제한되고 그룹 이름은 256자로 제한됩니다. 또한 계정 이름은 마침표로 종료할 수 없으며 쉼표 또는 인쇄 가능한 문자 중 ", /, , [, ], :, |, <, , >+, =, ;, ?, *를 포함할 수 없습니다. 또한 이름은 인쇄할 수 없는 1-31 범위의 문자를 포함할 수 없습니다.

예제

다음 코드 샘플에서는 NetUserGetGroups 함수를 호출하여 사용자가 속한 전역 그룹 목록을 검색하는 방법을 보여 줍니다. 샘플은 NetUserGetGroups를 호출하여 정보 수준 0( GROUP_USERS_INFO_0)을 지정합니다. 코드는 항목을 반복하고 사용자에게 멤버 자격이 있는 전역 그룹의 이름을 출력합니다. 또한 샘플은 사용할 수 있는 총 항목 수와 항목이 일치하지 않을 경우 실제로 열거된 항목 수를 출력합니다. 마지막으로 코드 샘플은 버퍼에 할당된 메모리를 해제합니다.

#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")

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

int wmain(int argc, wchar_t *argv[])
{
   LPGROUP_USERS_INFO_0 pBuf = NULL;
   DWORD dwLevel = 0;
   DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
   DWORD dwEntriesRead = 0;
   DWORD dwTotalEntries = 0;
   NET_API_STATUS nStatus;

   if (argc != 3)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
      exit(1);
   }
   //
   // Call the NetUserGetGroups function, specifying level 0.
   //
   nStatus = NetUserGetGroups(argv[1],
                              argv[2],
                              dwLevel,
                              (LPBYTE*)&pBuf,
                              dwPrefMaxLen,
                              &dwEntriesRead,
                              &dwTotalEntries);
   //
   // If the call succeeds,
   //
   if (nStatus == NERR_Success)
   {
      LPGROUP_USERS_INFO_0 pTmpBuf;
      DWORD i;
      DWORD dwTotalCount = 0;

      if ((pTmpBuf = pBuf) != NULL)
      {
         fprintf(stderr, "\nGlobal group(s):\n");
         //
         // Loop through the entries; 
         //  print the name of the global groups 
         //  to which the user belongs.
         //
         for (i = 0; i < dwEntriesRead; i++)
         {
            assert(pTmpBuf != NULL);

            if (pTmpBuf == NULL)
            {
               fprintf(stderr, "An access violation has occurred\n");
               break;
            }

            wprintf(L"\t-- %s\n", pTmpBuf->grui0_name);

            pTmpBuf++;
            dwTotalCount++;
         }
      }
      //
      // If all available entries were
      //  not enumerated, print the number actually 
      //  enumerated and the total number available.
      //
      if (dwEntriesRead < dwTotalEntries)
         fprintf(stderr, "\nTotal entries: %d", dwTotalEntries);
      //
      // Otherwise, just print the total.
      //
      printf("\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;
}

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 lmaccess.h(Lm.h 포함)
라이브러리 Netapi32.lib
DLL Netapi32.dll

참고 항목

GROUP_USERS_INFO_0

GROUP_USERS_INFO_1

NetGroupGetUsers

NetQueryDisplayInformation

NetUserGetInfo

NetUserGetLocalGroups

네트워크 관리 함수

네트워크 관리 개요

사용자 함수