Función NetSessionEnum (lmshare.h)

Proporciona información sobre las sesiones establecidas en un servidor.

Sintaxis

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
);

Parámetros

[in] servername

Puntero a una cadena que especifica el nombre DNS o NetBIOS del servidor remoto en el que se va a ejecutar la función. Si este parámetro es NULL, se usa el equipo local.

[in] UncClientName

Puntero a una cadena que especifica el nombre de la sesión del equipo para la que se va a devolver información. Si este parámetro es NULL, NetSessionEnum devuelve información para todas las sesiones de equipo del servidor.

[in] username

Puntero a una cadena que especifica el nombre del usuario para el que se va a devolver información. Si este parámetro es NULL, NetSessionEnum devuelve información para todos los usuarios.

[in] level

Especifica el nivel de información de los datos. Este parámetro puede ser uno de los valores siguientes.

Valor Significado
0
Devuelve el nombre del equipo que estableció la sesión. El parámetro bufptr apunta a una matriz de estructuras SESSION_INFO_0 .
1
Devuelve el nombre del equipo, el nombre del usuario y los archivos, canalizaciones y dispositivos abiertos en el equipo. El parámetro bufptr apunta a una matriz de estructuras SESSION_INFO_1 .
2
Además de la información indicada para el nivel 1, devuelva el tipo de cliente y cómo el usuario estableció la sesión. El parámetro bufptr apunta a una matriz de estructuras SESSION_INFO_2 .
10
Devuelve el nombre del equipo, el nombre del usuario y los tiempos de inactividad y activos de la sesión. El parámetro bufptr apunta a una matriz de estructuras SESSION_INFO_10 .
502
Devuelve el nombre del equipo; nombre del usuario; abrir archivos, canalizaciones y dispositivos en el equipo; y el nombre del transporte que usa el cliente. El parámetro bufptr apunta a una matriz de estructuras SESSION_INFO_502 .

[out] bufptr

Puntero al búfer que recibe los datos. El formato de estos datos depende del valor del parámetro level .

El sistema asigna este búfer y se debe liberar mediante la función NetApiBufferFree . Tenga en cuenta que debe liberar el búfer incluso si se produce un error en la función con ERROR_MORE_DATA.

[in] prefmaxlen

Especifica la longitud máxima preferida de los datos devueltos, en bytes. Si especifica MAX_PREFERRED_LENGTH, la función asigna la cantidad de memoria necesaria para los datos. Si especifica otro valor en este parámetro, puede restringir el número de bytes que devuelve la función. Si el tamaño del búfer no es suficiente para contener todas las entradas, la función devuelve ERROR_MORE_DATA. Para obtener más información, consulte Network Management Function Buffers (Búferes de funciones de administración de red) y Network Management Function Buffer Lengths (Longitudes de búfer de funciones de administración de red).

[out] entriesread

Puntero a un valor que recibe el recuento de elementos enumerados realmente.

[out] totalentries

Puntero a un valor que recibe el número total de entradas que podrían haberse enumerado a partir de la posición de reanudación actual. Tenga en cuenta que las aplicaciones deben considerar este valor solo como sugerencia.

[in, out] resume_handle

Puntero a un valor que contiene un identificador de reanudación que se usa para continuar una búsqueda de sesión existente. El identificador debe ser cero en la primera llamada y dejar sin cambios para las llamadas posteriores. Si resume_handle es NULL, no se almacena ningún identificador de reanudación.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es NERR_Success.

Si se produce un error en la función, el valor devuelto puede ser uno de los siguientes códigos de error.

Código devuelto Descripción
ERROR_ACCESS_DENIED
El usuario no tiene acceso a la información pedida.
ERROR_INVALID_LEVEL
El valor especificado para el parámetro level no es válido.
ERROR_INVALID_PARAMETER
El parámetro especificado no es válido.
ERROR_MORE_DATA
Hay más entradas disponibles. Especifique un búfer suficientemente grande para recibir todas las entradas.
ERROR_NOT_ENOUGH_MEMORY
No hay suficiente memoria disponible.
NERR_ClientNameNotFound
No existe una sesión con el nombre del equipo.
NERR_InvalidComputer
El nombre del equipo no es válido.
NERR_UserNotFound
No se encontró el nombre de usuario.

Comentarios

Solo los miembros del grupo local Administradores o Operadores de servidor pueden ejecutar correctamente la función NetSessionEnum en el nivel 1 o nivel 2.

Si está programando para Active Directory, puede llamar a determinados métodos de interfaz de servicio de Active Directory (ADSI) para lograr la misma funcionalidad que puede lograr llamando a las funciones de sesión de administración de red. Para obtener más información, vea IADsSession e IADsFileServiceOperations.

Ejemplos

En el ejemplo de código siguiente se muestra cómo recuperar información sobre las sesiones actuales mediante una llamada a la función NetSessionEnum . El ejemplo llama a NetSessionEnum, especificando el nivel de información 10 ( SESSION_INFO_10). El ejemplo recorre en bucle las entradas e imprime la información recuperada. Por último, el código imprime el número total de sesiones enumeradas y libera la memoria asignada para el búfer de información.

#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;
}

Requisitos

   
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado lmshare.h (include Lm.h)
Library Netapi32.lib
Archivo DLL Netapi32.dll

Consulte también

NetSessionGetInfo

Funciones de administración de redes

Introducción a la administración de redes

SESSION_INFO_0

SESSION_INFO_1

SESSION_INFO_10

SESSION_INFO_2

SESSION_INFO_502

Funciones de sesión