Hi, ich habe bis lang immer die Funktion
NetServerEnum der WinAPI verwendet, um alle Network-Member (also die PC Namen in einem lokalen Netzwerk)
zu finden. Aber leider funktioniert das nicht immer richtig :-(
Manchmal zeigt er mir mehr an, manchmal weniger. Auch dann, wenn der Windows-Explorer (Windows 7) unter "Netzwerk" alle PCs in meinem lokalen Netzwerk anzeigt.
Ich brauche da eine zuverlässigere Funktion. Gibt es da eine bessere Alternative oder was muss man bei der Funktion "NetServerEnum" besonderes beachten?
Hier ist mein Code-Ausschnitt:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
bool GetNetworkMembers(std::list<std::wstring> &MemberList)
{
SERVER_INFO_100* Buffer = 0;
DWORD Count, i;
/* Get server enumeration */
NET_API_STATUS NetStatus = NetServerEnum(0, 100, (LPBYTE*)&Buffer, MAX_PREFERRED_LENGTH, &i, &Count, SV_TYPE_ALL, 0, 0);
if (NetStatus != NERR_Success)
{
std::string ErrorStr;
switch (NetStatus)
{
case ERROR_ACCESS_DENIED:
ErrorStr = "Access was denied"; break;
case ERROR_INVALID_PARAMETER:
ErrorStr = "The parameter is incorrect"; break;
case ERROR_MORE_DATA:
ErrorStr = "More entries are available"; break;
case ERROR_NO_BROWSER_SERVERS_FOUND:
ErrorStr = "No browser servers found"; break;
case ERROR_NOT_SUPPORTED:
ErrorStr = "The request is not supported"; break;
case NERR_RemoteErr:
ErrorStr = "A remote error occurred with no data returned by the server"; break;
case NERR_ServerNotStarted:
ErrorStr = "The server service is not started"; break;
case NERR_ServiceNotInstalled:
ErrorStr = "The service has not been started"; break;
case NERR_WkstaNotStarted:
ErrorStr = "The Workstation service has not been started"; break;
default:
ErrorStr = "Unknown error"; break;
}
PrintError("Network member enumeration failed (" + ErrorStr + ")");
return false;
}
for (i = 0; i < Count; ++i)
MemberList.push_back(Buffer[i].sv100_name);
return true;
}
|