Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Расшаренные ресурсы в сети (https://forum.antichat.xyz/showthread.php?t=186652)

kurz 14.03.2010 01:12

Расшаренные ресурсы в сети
 
Возник такой вопрос: как в программе (на c++) реализовать получение списка расшаренных ресурсов определенного компа в локальной сети?
Может кто-нибудь помочь советом?

maestro-ant 14.03.2010 14:00

WNetOpenEnum и WNetEnumResource
рекурсивно перебирай спомощу: FindFirstFile, FindNextFile.

irinak 20.03.2010 18:28

Может у вас исходники есть программки на C++ VS по поиску локальных папок в сети?
Спасибо большое.

kurz 20.03.2010 21:18

Код:

#include "stdafx.h"

#pragma comment(lib, "netapi32.lib")
#pragma comment(lib, "mpr.lib")
#pragma comment(lib, "ws2_32.lib")

#define UNICODE
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <lm.h>

void wmain( int argc, TCHAR *lpszArgv[ ])
{
  PSHARE_INFO_502 BufPtr,p;
  NET_API_STATUS res;
  LPTSTR  lpszServer = NULL;
  DWORD er=0,tr=0,resume=0, i;

  lpszServer = lpszArgv[1];

  printf("Share:              Local Path:                  Uses:  Descriptor:\n");
  printf("---------------------------------------------------------------------\n");

  do
  {
      res = NetShareEnum (lpszServer, 502, (LPBYTE *) &BufPtr, -1, &er, &tr, &resume);

      if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
      {
        p=BufPtr;
        for(i=1;i<=er;i++)
        {
            printf("%-20S%-30S%-8u",p->shi502_netname, p->shi502_path, p->shi502_current_uses);
            if (IsValidSecurityDescriptor(p->shi502_security_descriptor))
              printf("Yes\n");
            else
              printf("No\n");
            p++;
        }
        NetApiBufferFree(BufPtr);
      }
      else
        printf("Error: %ld\n",res);
  }
  while (res==ERROR_MORE_DATA);
  getch();
 
  return;
}

это есть в MSDN. Правда в некоторых случаях возвращает error #5 - Access Denied, хотя сеть равноправная, о каком доступе идет речь?

irinak 21.03.2010 00:22

Спасибо большое, Kurz.
В мсдн-е видела такой пример, но он не скомпилился(.
error C2664: 'NetShareEnum' : cannot convert parameter 1 from 'LPTSTR' to 'LPSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

kurz 21.03.2010 11:09

я передавал параметр сразу из командной строки, ошибки вроде не было. все как в листинге. Функции передается сетевое имя компа, а не адрес.
вопрос: как получить сетевое имя компа по его адресу (функция WNetGetUser не возвращает толком ничего, пример из того же msdn'a не работает)

irinak 21.03.2010 15:46

Kurz, а разве функция NetShareEnum в первом парамере не выводит имена всех компов? Только вот как это получить? Может кто знает?
У меня ещё вопрос: всё работает - выводится путь расшаренной папки, проверяю на своем компе - локалки нет. Вопрос: Как мне из консольки сделать MFC?
Спасибочки)

kurz 22.03.2010 02:51

Код:

servername
Pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute.

-первый параметр, это сетевое имя компа, к которому применяется функция.
Цитата:

Как мне из консольки сделать MFC?
руками разве что...)

irinak 22.03.2010 02:53

Дельный совет!))))
Исходничка бы не нашлось?)

kurz 23.03.2010 18:32

Цитата:

Как мне из консольки сделать MFC?
помоему чтото похожее я видел в книге "C++ глазами хакера". Могу и ошибаться


Время: 12:47