다음을 통해 공유


NetSessionEnum 함수(lmshare.h)

서버에 설정된 세션에 대한 정보를 제공합니다.

구문

NET_API_STATUS NET_API_FUNCTION NetSessionEnum(
  [in]      LMSTR   servername,
  [in]      LMSTR   UncClientName,
  [in]      LMSTR   username,
  [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] UncClientName

정보를 반환할 컴퓨터 세션의 이름을 지정하는 문자열에 대한 포인터입니다. 이 매개 변수가 NULL이면 NetSessionEnum 은 서버의 모든 컴퓨터 세션에 대한 정보를 반환합니다.

[in] username

정보를 반환할 사용자의 이름을 지정하는 문자열에 대한 포인터입니다. 이 매개 변수가 NULL이면 NetSessionEnum은 모든 사용자에 대한 정보를 반환합니다.

[in] level

데이터의 정보 수준을 지정합니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
0
세션을 설정한 컴퓨터의 이름을 반환합니다. bufptr 매개 변수는 SESSION_INFO_0 구조체의 배열을 가리킵니다.
1
컴퓨터의 이름, 사용자 이름을 반환하고 컴퓨터에서 파일, 파이프 및 디바이스를 엽니다. bufptr 매개 변수는 SESSION_INFO_1 구조체의 배열을 가리킵니다.
2
수준 1에 대해 표시된 정보 외에도 클라이언트 유형과 사용자가 세션을 설정하는 방법을 반환합니다. bufptr 매개 변수는 SESSION_INFO_2 구조체의 배열을 가리킵니다.
10
컴퓨터 이름, 사용자 이름, 세션의 활성 및 유휴 시간을 반환합니다. bufptr 매개 변수는 SESSION_INFO_10 구조체의 배열을 가리킵니다.
502
컴퓨터의 이름을 반환합니다. 사용자의 이름입니다. 컴퓨터에서 파일, 파이프 및 디바이스를 엽니다. 및 클라이언트가 사용 중인 전송의 이름입니다. bufptr 매개 변수는 SESSION_INFO_502 구조체의 배열을 가리킵니다.

[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.

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

반환 코드 설명
ERROR_ACCESS_DENIED
사용자는 요청한 정보에 대한 액세스 권한이 없습니다.
ERROR_INVALID_LEVEL
level 매개 변수에 대해 지정된 값이 잘못되었습니다.
ERROR_INVALID_PARAMETER
지정된 매개 변수가 잘못되었습니다.
ERROR_MORE_DATA
더 많은 항목을 사용할 수 있습니다. 모든 항목을 받을 수 있을 만큼 큰 버퍼를 지정합니다.
ERROR_NOT_ENOUGH_MEMORY
사용 가능한 메모리가 부족합니다.
NERR_ClientNameNotFound
컴퓨터 이름을 가진 세션이 없습니다.
NERR_InvalidComputer
컴퓨터 이름이 잘못되었습니다.
NERR_UserNotFound
사용자 이름을 찾을 수 없습니다.

설명

관리자 또는 서버 운영자 로컬 그룹의 멤버만 수준 1 또는 수준 2에서 NetSessionEnum 함수를 성공적으로 실행할 수 있습니다.

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

예제

다음 코드 샘플에서는 NetSessionEnum 함수 호출을 사용하여 현재 세션에 대한 정보를 검색하는 방법을 보여 줍니다. 샘플은 NetSessionEnum을 호출하여 정보 수준 10( SESSION_INFO_10)을 지정합니다. 샘플은 항목을 반복하고 검색된 정보를 출력합니다. 마지막으로 코드는 열거된 총 세션 수를 출력하고 정보 버퍼에 할당된 메모리를 해제합니다.

#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[])
{
   LPSESSION_INFO_10 pBuf = NULL;
   LPSESSION_INFO_10 pTmpBuf;
   DWORD dwLevel = 10;
   DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
   DWORD dwEntriesRead = 0;
   DWORD dwTotalEntries = 0;
   DWORD dwResumeHandle = 0;
   DWORD i;
   DWORD dwTotalCount = 0;
   LPTSTR pszServerName = NULL;
   LPTSTR pszClientName = NULL;
   LPTSTR pszUserName = NULL;
   NET_API_STATUS nStatus;
   //
   // Check command line arguments.
   //
   if (argc > 4)
   {
      wprintf(L"Usage: %s [\\\\ServerName] [\\\\ClientName] [UserName]\n", argv[0]);
      exit(1);
   }

   if (argc >= 2)
      pszServerName = argv[1];

   if (argc >= 3)
      pszClientName = argv[2];

   if (argc == 4)
      pszUserName = argv[3];
   //
   // Call the NetSessionEnum function, specifying level 10.
   //
   do // begin do
   {
      nStatus = NetSessionEnum(pszServerName,
                               pszClientName,
                               pszUserName,
                               dwLevel,
                               (LPBYTE*)&pBuf,
                               dwPrefMaxLen,
                               &dwEntriesRead,
                               &dwTotalEntries,
                               &dwResumeHandle);
      //
      // If the call succeeds,
      //
      if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
      {
         if ((pTmpBuf = pBuf) != NULL)
         {
            //
            // Loop through the entries.
            //
            for (i = 0; (i < dwEntriesRead); i++)
            {
               assert(pTmpBuf != NULL);

               if (pTmpBuf == NULL)
               {
                  fprintf(stderr, "An access violation has occurred\n");
                  break;
               }
               //
               // Print the retrieved data. 
               //
               wprintf(L"\n\tClient: %s\n", pTmpBuf->sesi10_cname);
               wprintf(L"\tUser:   %s\n", pTmpBuf->sesi10_username);
               printf("\tActive: %d\n", pTmpBuf->sesi10_time);
               printf("\tIdle:   %d\n", pTmpBuf->sesi10_idle_time);

               pTmpBuf++;
               dwTotalCount++;
            }
         }
      }
      //
      // Otherwise, indicate a system error.
      //
      else
         fprintf(stderr, "A system error has occurred: %d\n", nStatus);
      //
      // Free the allocated memory.
      //
      if (pBuf != NULL)
      {
         NetApiBufferFree(pBuf);
         pBuf = NULL;
      }
   }
   // 
   // Continue to call NetSessionEnum while 
   //  there are more entries. 
   // 
   while (nStatus == ERROR_MORE_DATA); // end do

   // Check again for an allocated buffer.
   //
   if (pBuf != NULL)
      NetApiBufferFree(pBuf);
   //
   // Print the final count of sessions enumerated.
   //
   fprintf(stderr, "\nTotal of %d entries enumerated\n", dwTotalCount);

   return 0;
}

요구 사항

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

참고 항목

NetSessionGetInfo

네트워크 관리 함수

네트워크 관리 개요

SESSION_INFO_0

SESSION_INFO_1

SESSION_INFO_10

SESSION_INFO_2

SESSION_INFO_502

세션 함수