有时候,总想验证一些奇怪的想法,干脆就写下来,以备后查。
想法:获取本机用户列表
// 获取本地账号列表
BOOL GetLocalUserList(CAtlArray<CString> &users)
{
users.RemoveAll();
BOOL bOk = FALSE;
LPUSER_INFO_0 pBuf = NULL;
DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
DWORD dwResumeHandle = 0;
NET_API_STATUS nStatus;
do
{
nStatus = NetUserEnum(NULL, 0, FILTER_NORMAL_ACCOUNT, (LPBYTE*)&pBuf, MAX_PREFERRED_LENGTH,
&dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
{
LPUSER_INFO_0 pTmpBuf = pBuf;
if (pTmpBuf != NULL)
{
for (DWORD i = 0; i < dwEntriesRead; i++)
{
if (NULL == pTmpBuf)
{
break;
}
users.Add(pTmpBuf->usri0_name);
pTmpBuf++;
}
}
bOk = TRUE;
}
if (pBuf != NULL)
{
NetApiBufferFree(pBuf);
pBuf = NULL;
}
}
while (nStatus == ERROR_MORE_DATA);
// finally
{
if (pBuf != NULL) NetApiBufferFree(pBuf);
}
return bOk;
}
// 测试获取本地账户列表
void TestCase_QueryLocalUserList()
{
CAtlArray<CString> users;
(void)GetLocalUserList(users);
for (DWORD i = 0; i < users.GetCount(); i++)
{
_tprintf_s(_T("%d : %s \n"), i + 1, users.GetAt(i));
}
}
执行结果:
Visual Leak Detector Version 2.5.1 installed.
1 : Admin
2 : Administrator
3 : Guest
No memory leaks detected.
Visual Leak Detector is now exiting.
这篇博客记录了一个验证过程,即如何获取本机的用户列表。作者分享了这个奇怪但实用的想法,并且执行了相关操作。

4809

被折叠的 条评论
为什么被折叠?



