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
데이터의 정보 수준을 지정합니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
세션을 설정한 컴퓨터의 이름을 반환합니다. bufptr 매개 변수는 SESSION_INFO_0 구조체의 배열을 가리킵니다. |
|
컴퓨터의 이름, 사용자 이름을 반환하고 컴퓨터에서 파일, 파이프 및 디바이스를 엽니다. bufptr 매개 변수는 SESSION_INFO_1 구조체의 배열을 가리킵니다. |
|
수준 1에 대해 표시된 정보 외에도 클라이언트 유형과 사용자가 세션을 설정하는 방법을 반환합니다. bufptr 매개 변수는 SESSION_INFO_2 구조체의 배열을 가리킵니다. |
|
컴퓨터 이름, 사용자 이름, 세션의 활성 및 유휴 시간을 반환합니다. bufptr 매개 변수는 SESSION_INFO_10 구조체의 배열을 가리킵니다. |
|
컴퓨터의 이름을 반환합니다. 사용자의 이름입니다. 컴퓨터에서 파일, 파이프 및 디바이스를 엽니다. 및 클라이언트가 사용 중인 전송의 이름입니다. 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.
함수가 실패하면 반환 값은 다음 오류 코드 중 하나일 수 있습니다.
반환 코드 | 설명 |
---|---|
|
사용자는 요청한 정보에 대한 액세스 권한이 없습니다. |
|
level 매개 변수에 대해 지정된 값이 잘못되었습니다. |
|
지정된 매개 변수가 잘못되었습니다. |
|
더 많은 항목을 사용할 수 있습니다. 모든 항목을 받을 수 있을 만큼 큰 버퍼를 지정합니다. |
|
사용 가능한 메모리가 부족합니다. |
|
컴퓨터 이름을 가진 세션이 없습니다. |
|
컴퓨터 이름이 잘못되었습니다. |
|
사용자 이름을 찾을 수 없습니다. |
설명
관리자 또는 서버 운영자 로컬 그룹의 멤버만 수준 1 또는 수준 2에서 NetSessionEnum 함수를 성공적으로 실행할 수 있습니다.
Active Directory를 프로그래밍하는 경우 특정 ADSI(Active Directory Service Interface) 메서드를 호출하여 네트워크 관리 세션 함수를 호출하여 달성할 수 있는 동일한 기능을 달성할 수 있습니다. 자세한 내용은 IADsSession 및 IADsFileServiceOperations를 참조하세요.
예제
다음 코드 샘플에서는 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 |