Поделиться через


Функция NetSessionGetInfo (lmshare.h)

Извлекает сведения о сеансе, установленном между определенным сервером и рабочей станцией.

Синтаксис

NET_API_STATUS NET_API_FUNCTION NetSessionGetInfo(
  [in]  LMSTR  servername,
  [in]  LMSTR  UncClientName,
  [in]  LMSTR  username,
  [in]  DWORD  level,
  [out] LPBYTE *bufptr
);

Параметры

[in] servername

Указатель на строку, указывающую DNS- или NetBIOS-имя удаленного сервера, на котором выполняется функция. Если этот параметр имеет значение NULL, используется локальный компьютер.

[in] UncClientName

Указатель на строку, указывающую имя сеанса компьютера, для которого должны быть возвращены сведения. Этот параметр является обязательным и не может иметь значение NULL. Дополнительные сведения см. в статье NetSessionEnum.

[in] username

Указатель на строку, указывающую имя пользователя, сведения о сеансе которого должны быть возвращены. Этот параметр является обязательным и не может иметь значение NULL.

[in] level

Задает уровень информации данных. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
0
Возвращает имя компьютера, на который был установлен сеанс.

Параметр bufptr указывает на структуру SESSION_INFO_0 .

1
Возвращает имя компьютера, имя пользователя и открытые файлы, каналы и устройства на компьютере.

Параметр bufptr указывает на SESSION_INFO_1 структуру.

2
В дополнение к сведениям, указанным для уровня 1, возвращается тип клиента и способ установки сеанса пользователем.

Параметр bufptr указывает на структуру SESSION_INFO_2 .

10
Возвращает имя компьютера; имя пользователя; и время активного и простоя сеанса.

Параметр bufptr указывает на SESSION_INFO_10 структуру.

[out] bufptr

Указатель на буфер, который получает данные. Формат этих данных зависит от значения параметра level . Дополнительные сведения см. в разделах Буферы функций управления сетью и Длина буфера функции управления сетью.

Этот буфер выделяется системой и должен быть освобожден с помощью функции NetApiBufferFree .

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение будет NERR_Success.

Если функция завершается ошибкой, возвращаемое значение может быть одним из следующих кодов ошибок.

Код возврата Описание
ERROR_ACCESS_DENIED
Пользователь не имеет доступа к запрошенной информации.
ERROR_INVALID_LEVEL
Недопустимое значение, указанное для параметра level .
ERROR_INVALID_PARAMETER
Указанный параметр недопустим.
ERROR_NOT_ENOUGH_MEMORY
Недостаточно памяти.
NERR_ClientNameNotFound
Сеанс с именем компьютера не существует.
NERR_InvalidComputer
Недопустимое имя компьютера.
NERR_UserNotFound
Не удалось найти имя пользователя.

Комментарии

Только члены локальной группы Администраторы или Операторы сервера могут успешно выполнять функцию NetSessionGetInfo на уровне 1 или 2. Для звонков уровня 0 или 10 не требуется специальное членство в группах.

При программировании для Active Directory вы можете вызвать определенные методы ИНТЕРФЕЙСА службы Active Directory (ADSI), чтобы достичь тех же функций, которые можно достичь, вызывая функции сеанса управления сетью. Дополнительные сведения см. в разделах IADsSession и IADsFileServiceOperations.

Если вы вызываете эту функцию на уровне сведений 1 или 2 на рядовом сервере или рабочей станции, все пользователи, прошедшие проверку подлинности, смогут просматривать сведения.

Примеры

В следующем примере кода показано, как получить сведения о сеансе с помощью вызова функции NetSessionGetInfo . Пример вызывает NetSessionGetInfo, указывая уровень сведений 10 ( SESSION_INFO_10). Если вызов выполнен успешно, код выводит сведения о сеансе. Наконец, образец освобождает память, выделенную для информационного буфера.

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

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

int wmain(int argc, wchar_t *argv[])
{
   DWORD dwLevel = 10;
   LPSESSION_INFO_10 pBuf = NULL;
   LPTSTR pszServerName = NULL;
   LPTSTR pszUNCClientName = NULL;
   LPTSTR pszUserName = NULL;
   NET_API_STATUS nStatus;
   //
   // Check command line arguments.
   //
   if (argc == 3)
   {
      pszUNCClientName = argv[1];
      pszUserName = argv[2];
   }
   else if (argc == 4)
   {
      pszServerName = argv[1];
      pszUNCClientName = argv[2];
      pszUserName = argv[3];
   }
   else
   {
      wprintf(L"Usage: %s [\\\\ServerName] \\\\ClientName UserName\n", argv[0]);
      exit(1);
   }
   //
   // Call the NetSessionGetInfo function, specifying level 10.
   //
   nStatus = NetSessionGetInfo(pszServerName,
                               pszUNCClientName,
                               pszUserName,
                               dwLevel,
                               (LPBYTE *)&pBuf);
   //
   // If the call succeeds,
   //
   if (nStatus == NERR_Success)
   {
      if (pBuf != NULL)
      {
         //
         // Print the session information. 
         //
         wprintf(L"\n\tClient: %s\n", pBuf->sesi10_cname);
         wprintf(L"\tUser:   %s\n", pBuf->sesi10_username);
         printf("\tActive: %d\n", pBuf->sesi10_time);
         printf("\tIdle:   %d\n", pBuf->sesi10_idle_time);
      }
   }
   //
   // 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);

   return 0;
}

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header lmshare.h (включая Lm.h)
Библиотека Netapi32.lib
DLL Netapi32.dll

См. также раздел

NetSessionDel

NetSessionEnum

Функции управления сетью

Общие сведения об управлении сетью

SESSION_INFO_0

SESSION_INFO_1

SESSION_INFO_10

SESSION_INFO_2

Функции сеансов