Программирование на C++ глазами хакера


Структура сети - часть 3


if (dwResult != NO_ERROR) { return false; }

do { lpnrDrv = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer); dwResult = WNetEnumResource(hEnum, &cEntries, lpnrDrv, &cbBuffer); if (dwResult == NO_ERROR) { for(i = 0; i<cEntries; i++) { CString sNameRemote = lpnrDrv[i].lpRemoteName; int nType = 9; if(sNameRemote.IsEmpty()) { sNameRemote = lpnrDrv[i].lpComment; nType = 8; } if (sNameRemote.GetLength() > 0 && sNameRemote[0] == _T('\\')) sNameRemote = sNameRemote.Mid(1); if (sNameRemote.GetLength() > 0 && sNameRemote[0] == _T('\\')) sNameRemote = sNameRemote.Mid(1);

if (lpnrDrv[i].dwDisplayType == RESOURCEDISPLAYTYPE_SHARE) { int nPos = sNameRemote.Find( _T('\\')); if(nPos >= 0) sNameRemote = sNameRemote.Mid(nPos+1); InsertTreeItem(hParent, NULL, sNameRemote, DRIVE_NO_ROOT_DIR); } else { NETRESOURCE* pResource = new NETRESOURCE; ASSERT(pResource); *pResource = lpnrDrv[i]; pResource->lpLocalName = MakeDynamic(pResource->lpLocalName); pResource->lpRemoteName = MakeDynamic(pResource->lpRemoteName); pResource->lpComment = MakeDynamic(pResource->lpComment); pResource->lpProvider = MakeDynamic(pResource->lpProvider); InsertTreeItem(hParent, pResource, sNameRemote, pResource->dwDisplayType+7); } bGotChildren = true; } } GlobalFree((HGLOBAL)lpnrDrv); if (dwResult != ERROR_NO_MORE_ITEMS) break; } while (dwResult != ERROR_NO_MORE_ITEMS);

WNetCloseEnum(hEnum); return bGotChildren; }

Логика поиска сетевых ресурсов достаточно проста. Для начала нужно открыть поиск функцией WNetOpenEnum, которая выглядит следующим образом:

DWORD WNetOpenEnum( DWORD dwScope, // scope of enumeration DWORD dwType, // resource types to list DWORD dwUsage, // resource usage to list LPNETRESOURCE lpNetResource, // pointer to resource structure LPHANDLE lphEnum // pointer to enumeration handle buffer );

Функция открывает перечисление сетевых устройств в локальной сети. Рассмотрим передаваемые ей параметры:

  • dwScope — ресурсы, включаемые в перечисление. Возможны комбинации следующих значений: