список машин - NetServerEnum
От: meier  
Дата: 05.07.05 10:25
Оценка:
Dobrogo dnja wsem.
Wosnikla problema s ispoljsowaniem funkzii NetServerEnum. W seti klienta sushestwuet domain s > 50000 stations. Dlja etoi domain zitaet funktion toljko nemnogim > 3500 stationen.
Kod:



USES_CONVERSION;
LPCTSTR lpszDomain = (LPCTSTR)szDom;

if (lpszDomain != NULL)
{
LPWSTR kpwszDom = A2W(szDom);

DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
LPSERVER_INFO_101 pBuf = NULL;
DWORD dwLevel = 101;
DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
DWORD dwTotalCount = 0;
DWORD dwServerType = m_dwReadMody; // probowal: SV_TYPE_NT, SV_TYPE_ALL, SV_TYPE_WORKSTATION, SV_TYPE_SERVER
DWORD dwResumeHandle = 0;
NET_API_STATUS nStatus;
LPTSTR pszServerName = NULL;
DWORD i;


nStatus = NetServerEnum(NULL,
dwLevel,
(LPBYTE *) &pBuf,
dwPrefMaxLen,
&dwEntriesRead,
&dwTotalEntries,
dwServerType,
kpwszDom,
&dwResumeHandle);

m_dwEntriesRead = dwEntriesRead;
m_dwTotalEntries = dwTotalEntries;

//
// If the call succeeds,
//
if( (nStatus == ERROR_MORE_DATA) )
..........

if ( (nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA) )
{
if (pBuf != NULL)
{
//
// Loop through the entries and
// print the data for all server types.
//
for (i = 0; i < dwEntriesRead; i++)
{
// Convert server name back to ANSI
// if input domain name had to be
// converted
CString strStation = W2A((WCHAR*)pBuf[i].sv101_name);
m_StationList.AddTail(strStation);
}

if(pBuf)
NetApiBufferFree(pBuf);
}
}
}

Result: wsegda nStatus == NERR_Success i dwTotalEntries = dwEntriesRead = 3500 wmesto ~50000


Kto nibudj stalkiwalsja s problemoj ?
Gde terjajutsja ~46000 stationen ?

Saranee blagodaren,
Eugen


05.07.05 17:49: Перенесено модератором из 'C/C++' — WolfHound
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.