/*
* NetUser.h
* Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*/
// SOL9
// 2009/10/10
#pragma once
#include <sol/nm/NetManager.h>
#include <sol/nm/GroupInfo.h>
#include <sol/nm/UserInfo.h>
namespace SOL {
class NetUser :public NetManager {
public:
/**
* Constructor
*/
NetUser(const wchar_t* server=NULL)
:NetManager(server)
{
}
public:
int getLocalGroups(__in const wchar_t* userName,
__in DWORD flags,
__inout GroupInfo& groupInfo)
{
const wchar_t* serverName = getServerName();
LPBYTE pbuffer = NULL;
DWORD entriesRead = 0;
DWORD totalEntries = 0;
DWORD level = groupInfo.getLevel();
NET_API_STATUS rc = NetUserGetLocalGroups((wchar_t*)serverName, (wchar_t*)userName,
level, flags,
&pbuffer,
MAX_PREFERRED_LENGTH, &entriesRead, &totalEntries);
if (rc == NERR_Success) {
groupInfo.setInfo(pbuffer, entriesRead, totalEntries);
} else {
throw (int)rc;
}
return rc;
}
public:
int getGroups(__in const wchar_t* userName,
__inout GroupInfo& groupInfo)
{
const wchar_t* serverName = getServerName();
LPBYTE pbuffer = NULL;
DWORD entriesRead = 0;
DWORD totalEntries = 0;
DWORD level = groupInfo.getLevel();
NET_API_STATUS rc = NetUserGetGroups((wchar_t*)serverName, (wchar_t*)userName, level,
&pbuffer,
MAX_PREFERRED_LENGTH, &entriesRead, &totalEntries);
if (rc == NERR_Success) {
groupInfo.setInfo(pbuffer, entriesRead, totalEntries);
} else {
throw (int)rc;
}
return rc;
}
public:
/**
@param filter Specifies a filter of account types to enumerate. A value of zero implies all account types.
Allowable values are:
FILTER_TEMP_DUPLICATE_ACCOUNTS: Enumerates local user account data on a domain controller.
FILTER_NORMAL_ACCOUNT: Enumerates global user account data on a computer.
FILTER_INTERDOMAIN_TRUST_ACCOUNT: Enumerates domain trust account data on a domain controller.
FILTER_WORKSTATION_TRUST_ACCOUNT: Enumerates workstation or member server account data on a domain controller.
FILTER_SERVER_TRUST_ACCOUNT: Enumerates domain controller account data on a domain controller.
*/
int enumerate(__in DWORD filter,
__inout UserInfo& userInfo)
{
const wchar_t* serverName = getServerName();
LPBYTE pbuffer = NULL;
DWORD entriesRead = 0;
DWORD totalEntries = 0;
DWORD level = userInfo.getLevel();
NET_API_STATUS rc = NetUserEnum((wchar_t*)serverName, level,
filter,
&pbuffer,
MAX_PREFERRED_LENGTH, &entriesRead,&totalEntries, NULL);
if (rc == NERR_Success) {
userInfo.setInfo(pbuffer, entriesRead, totalEntries);
} else {
throw (int)rc;
}
return rc;
}
public:
int enumerateAll(__inout UserInfo& userInfo)
{
//Specify 0 to the second ffilter parameter
DWORD filter = 0;
return enumerate(filter, userInfo);
}
};
}
|