//Luigi Bianchi, www.luigibianchi.com #include <list> typedef list<string> StrList; typedef StrList::iterator sl_It; bool EnumNet(StrList& list, DWORD dwLevel, LPNETRESOURCE lpNet) { HANDLE hEnum; DWORD dwStatus = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpNet, &hEnum); if (dwStatus != NO_ERROR) return false; DWORD dwEntries = 512; DWORD dwSize = sizeof(NETRESOURCE) * dwEntries; LPNETRESOURCE lpNewNet = new NETRESOURCE[dwEntries]; dwStatus = WNetEnumResource(hEnum, &dwEntries, (LPVOID)lpNewNet, &dwSize); if (dwStatus != NO_ERROR) { WNetCloseEnum(hEnum); delete [] lpNewNet; return false; } WNetCloseEnum(hEnum); string str; for(int i = 0; i < dwEntries; i++ ) { if( lpNewNet[ i ].lpRemoteName ) { switch (lpNewNet[ i ].dwDisplayType) { case RESOURCEDISPLAYTYPE_DOMAIN: str = "Domain "; break; case RESOURCEDISPLAYTYPE_GENERIC: str = "Generic "; break; case RESOURCEDISPLAYTYPE_SERVER: str = "Server "; break; case RESOURCEDISPLAYTYPE_SHARE: str = "Share "; break; case RESOURCEDISPLAYTYPE_FILE: str = "File "; break; case RESOURCEDISPLAYTYPE_GROUP: str = "Group "; break; case RESOURCEDISPLAYTYPE_TREE: str = "Tree "; break; #if(WINVER >= 0x0400) case RESOURCEDISPLAYTYPE_NETWORK: str = "Network "; break; case RESOURCEDISPLAYTYPE_ROOT: str = "Root "; break; case RESOURCEDISPLAYTYPE_SHAREADMIN: str = "Share Admin "; break; case RESOURCEDISPLAYTYPE_DIRECTORY: str = "Directory "; break; case RESOURCEDISPLAYTYPE_NDSCONTAINER: str = "NDS Container "; break; #endif /* WINVER >= 0x0400 */ } for(int j = 0; j < dwLevel; j++) // Indent levels deeper with spaces str = str + " "; // Add name and send to listbox str = str + lpNewNet[i].lpRemoteName; list.push_back(str); } // Call again for each entry EnumNet(list, dwLevel + 1, lpNewNet + i); } delete [] lpNewNet; return true; }
Copyright (2000), Luigi Bianchi Last Update: September 8, 2000