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 |
---|---|
|
Devuelve el nombre del equipo que estableció la sesión. El parámetro bufptr apunta a una matriz de estructuras SESSION_INFO_0 . |
|
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 . |
|
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 . |
|
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 . |
|
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 |
---|---|
|
El usuario no tiene acceso a la información pedida. |
|
El valor especificado para el parámetro level no es válido. |
|
El parámetro especificado no es válido. |
|
Hay más entradas disponibles. Especifique un búfer suficientemente grande para recibir todas las entradas. |
|
No hay suficiente memoria disponible. |
|
No existe una sesión con el nombre del equipo. |
|
El nombre del equipo no es válido. |
|
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
Funciones de administración de redes