windows下C++获取用户相关信息

主要流程如下:
1、获取所有用户
2、调用api获取用户相关信息

bool GetUserInfo(WCHAR* username)
{
	//用户信息
	LPUSER_INFO_2 pBuf = NULL;
	LPUSER_INFO_2 pBuf2 = NULL;
	LPUSER_INFO_4 pBuf4 = NULL;
	//获取用户信息
	if (NetUserGetInfo(NULL, username, 4, (LPBYTE*)&pBuf4) == NERR_Success ||
		NetUserGetInfo(NULL, username, 2, (LPBYTE*)&pBuf2) == NERR_Success) {

		if (pBuf4 != NULL)
			pBuf = (LPUSER_INFO_2)pBuf4;
		else
			pBuf = pBuf2;

		if (pBuf == NULL) {
			return FALSE;
		}

		if (pBuf != NULL)
			NetApiBufferFree(pBuf);
	}
	return TRUE;
}

bool GetUserGroup(WCHAR* username)
{
	LPLOCALGROUP_USERS_INFO_0 plgus0 = NULL;
	LPLOCALGROUP_USERS_INFO_0 plgus1 = NULL;
	LPGROUP_USERS_INFO_0 pgus0 = NULL;
	LPGROUP_USERS_INFO_0 pgus1 = NULL;

	DWORD group_entriesread = 0;
	DWORD group_totalentries = 0;
	
	//获取用户组信息
	if (NetUserGetLocalGroups(NULL, username, 0, LG_INCLUDE_INDIRECT, (LPBYTE*)&plgus0, MAX_PREFERRED_LENGTH, &group_entriesread, &group_totalentries) == NERR_Success)
	{
		if ((plgus1 = plgus0) != NULL)
		{
			for (int j = 0; j < (int)group_entriesread; j++)
			{
				//用户组信息
				plgus1++;
			}
			NetApiBufferFree(plgus0);
		}
	}
	// 获取全局组成员
	pgus0 = NULL;
	if (NetUserGetGroups(NULL, username, 0, (LPBYTE*)&pgus0, MAX_PREFERRED_LENGTH, &group_entriesread, &group_totalentries) == NERR_Success)
	{
		if ((pgus1 = pgus0) != NULL)
		{
			for (int j = 0; j < (int)group_entriesread; j++)
			{
				//用户组信息
				pgus1++;
			}
			NetApiBufferFree(pgus0);
		}
	}



	return TRUE;
}

int user_enum()
{
	LPUSER_INFO_0 pBuf = NULL;
	LPUSER_INFO_0 pTmpBuf;
	DWORD dwLevel = 0;
	LPTSTR pszServerName = NULL;
	DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
	DWORD dwEntriesRead = 0;
	DWORD dwTotalEntries = 0;
	DWORD dwResumeHandle = 0;
	DWORD i = 0;

	CHAR szUserUtf8[260] = { 0 };
	CHAR szUtf8[512] = { 0 };

	DWORD len = 0;
	NET_API_STATUS nStatus;
	int arrayIndex1 = 1;

	//获取所有用户信息
	nStatus = NetUserEnum((LPCWSTR)pszServerName,
		dwLevel,
		FILTER_NORMAL_ACCOUNT,
		(LPBYTE*)&pBuf,
		dwPrefMaxLen,
		&dwEntriesRead,
		&dwTotalEntries,
		&dwResumeHandle
	);

	if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
	{
		if ((pTmpBuf = pBuf) != NULL)
		{
			for (i = 0; (i < dwEntriesRead); i++)
			{
				assert(pTmpBuf != NULL);
				if (pTmpBuf == NULL)
				{
					fprintf(stderr, "An access violation has occurred\n");
					break;
				}

				WideToUtf8_L(pTmpBuf->usri0_name, szUserUtf8, 260);

				if (match != NULL)
				{
					if (wildcardcmp(match, szUserUtf8) == 0)
					{
						pTmpBuf++;
						dwTotalCount++;
						continue;
					}
				}

				UserInfo* info = (UserInfo*)malloc(sizeof(UserInfo));
				memset(info, 0, sizeof(UserInfo));
				
				pTmpBuf++;
			}
		}
	}

	if (pBuf != NULL) {
		NetApiBufferFree(pBuf);
		pBuf = NULL;
	}

	return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值