who_list impl for win32
This commit is contained in:
parent
4eca5b0aa0
commit
ad1c00ef75
68
src/sigar.c
68
src/sigar.c
|
@ -744,10 +744,76 @@ SIGAR_DECLARE(int) sigar_who_list_destroy(sigar_t *sigar,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
||||||
|
#include <lm.h>
|
||||||
|
|
||||||
|
static int sigar_who_net_sessions(sigar_t *sigar,
|
||||||
|
sigar_who_list_t *wholist)
|
||||||
|
{
|
||||||
|
NET_API_STATUS status;
|
||||||
|
LPSESSION_INFO_10 buffer=NULL, ptr;
|
||||||
|
DWORD entries=0, total_entries=0;
|
||||||
|
DWORD resume_handle=0;
|
||||||
|
DWORD i;
|
||||||
|
|
||||||
|
do {
|
||||||
|
status = NetSessionEnum(NULL, /* server name */
|
||||||
|
NULL, /* client name */
|
||||||
|
NULL, /* user name */
|
||||||
|
10, /* level */
|
||||||
|
(LPBYTE*)&buffer,
|
||||||
|
MAX_PREFERRED_LENGTH,
|
||||||
|
&entries,
|
||||||
|
&total_entries,
|
||||||
|
&resume_handle);
|
||||||
|
|
||||||
|
if ((status == NERR_Success) || (status == ERROR_MORE_DATA)) {
|
||||||
|
if ((ptr = buffer)) {
|
||||||
|
for (i=0; i<entries; i++) {
|
||||||
|
sigar_who_t *who;
|
||||||
|
|
||||||
|
if (!ptr) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
SIGAR_WHO_LIST_GROW(wholist);
|
||||||
|
who = &wholist->data[wholist->number++];
|
||||||
|
|
||||||
|
who->time = (time() - ptr->sesi10_time);
|
||||||
|
SIGAR_W2A((LPCWSTR)ptr->sesi10_cname,
|
||||||
|
who->user, sizeof(who->user));
|
||||||
|
SIGAR_W2A((LPCWSTR)ptr->sesi10_username,
|
||||||
|
who->host, sizeof(who->host));
|
||||||
|
SIGAR_SSTRCPY(who->device, "network share");
|
||||||
|
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer) {
|
||||||
|
NetApiBufferFree(buffer);
|
||||||
|
}
|
||||||
|
} while (status == ERROR_MORE_DATA);
|
||||||
|
|
||||||
|
if (buffer) {
|
||||||
|
NetApiBufferFree(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return SIGAR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
SIGAR_DECLARE(int) sigar_who_list_get(sigar_t *sigar,
|
SIGAR_DECLARE(int) sigar_who_list_get(sigar_t *sigar,
|
||||||
sigar_who_list_t *wholist)
|
sigar_who_list_t *wholist)
|
||||||
{
|
{
|
||||||
return SIGAR_ENOTIMPL;
|
sigar_who_list_create(wholist);
|
||||||
|
|
||||||
|
sigar_who_net_sessions(sigar, wholist);
|
||||||
|
|
||||||
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
SIGAR_DECLARE(int) sigar_resource_limit_get(sigar_t *sigar,
|
SIGAR_DECLARE(int) sigar_resource_limit_get(sigar_t *sigar,
|
||||||
|
|
Loading…
Reference in New Issue