64,682
社区成员
发帖
与我相关
我的任务
分享
//#pragma comment(lib, "netapi32.lib")
#include <stdio.h>
#include <assert.h>
#include <windows.h>
#include <lm.h>
int main()
{
LPUSER_INFO_0 pBuf = NULL;
LPUSER_INFO_0 pTmpBuf;
DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
DWORD dwResumeHandle = 0;
NET_API_STATUS nStatus;
do
{ nStatus = NetUserEnum((LPCWSTR) NULL, 0, FILTER_NORMAL_ACCOUNT, (LPBYTE*)&pBuf, MAX_PREFERRED_LENGTH,
&dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) // If the call succeeds,
{
if ((pTmpBuf = pBuf) != NULL) //疑问1:此处为什么判断!= NULL 外层if已经判断了If the call succeeds, 这个值就肯定不会是空啊?为啥要多此一举?
{
for (DWORD i = 0; (i < dwEntriesRead); i++) // Loop through the entries.
{
assert(pTmpBuf != NULL); //疑问2:这句话是什么意思 我觉得好像不起作用
if (pTmpBuf == NULL) //疑问3: 我觉的应该此处没有为空的可能性啊
{
fprintf(stderr, "An access violation has occurred\n");
break;
}
wprintf(L"%s\n", pTmpBuf->usri0_name); // Print the name of the user account.
pTmpBuf++;
}
}
}
// Free the allocated buffer.
if (pBuf != NULL)
{
NetApiBufferFree(pBuf);
pBuf = NULL; //疑问4:这里如果不设pBuf = NULL,有严重后果吗?
}
}
// Continue to call NetUserEnum while there are more entries.
while (nStatus == ERROR_MORE_DATA); // end do
// Check again for allocated memory. 疑问5:循环体里面不是每次都释放了吗 最后在释放有必要吗?
if (pBuf != NULL) NetApiBufferFree(pBuf);
return 0;
}
#include <stdio.h>
#include <windows.h>
#include <lm.h>
#pragma comment(lib, "netapi32.lib")
int main()
{
LPUSER_INFO_0 pBuf = NULL;
LPUSER_INFO_0 pTmpBuf;
NET_API_STATUS nStatus;
DWORD dwEntriesRead = 0, dwTotalEntries = 0, dwResumeHandle = 0;
do
{ nStatus = NetUserEnum((LPCWSTR) NULL, 0, FILTER_NORMAL_ACCOUNT, (LPBYTE*)&pBuf, MAX_PREFERRED_LENGTH,
&dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) // If the call succeeds,
{
pTmpBuf = pBuf;
for (DWORD i = 0; (i < dwEntriesRead); i++) // Loop through the entries.
{
wprintf(L"%s\n", pTmpBuf->usri0_name); // Print the name of the user account.
pTmpBuf++;
}
}
if (pBuf != NULL){NetApiBufferFree(pBuf); pBuf = NULL;} // Free the allocated buffer. 保留这句好
}while (nStatus == ERROR_MORE_DATA);
//if (pBuf != NULL) NetApiBufferFree(pBuf); // Check again for allocated memory. 还是保留这句好呢 不是说重复了吗
return 0;
}