Расшаренные ресурсы в сети

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by kurz, 14 Mar 2010.

  1. kurz

    kurz New Member

    Joined:
    5 Feb 2010
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Возник такой вопрос: как в программе (на c++) реализовать получение списка расшаренных ресурсов определенного компа в локальной сети?
    Может кто-нибудь помочь советом?
     
  2. maestro-ant

    maestro-ant New Member

    Joined:
    7 Jan 2007
    Messages:
    26
    Likes Received:
    4
    Reputations:
    6
    WNetOpenEnum и WNetEnumResource
    рекурсивно перебирай спомощу: FindFirstFile, FindNextFile.
     
  3. irinak

    irinak New Member

    Joined:
    19 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Может у вас исходники есть программки на C++ VS по поиску локальных папок в сети?
    Спасибо большое.
     
  4. kurz

    kurz New Member

    Joined:
    5 Feb 2010
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Code:
    #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, хотя сеть равноправная, о каком доступе идет речь?
     
  5. irinak

    irinak New Member

    Joined:
    19 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Спасибо большое, 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
     
  6. kurz

    kurz New Member

    Joined:
    5 Feb 2010
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    я передавал параметр сразу из командной строки, ошибки вроде не было. все как в листинге. Функции передается сетевое имя компа, а не адрес.
    вопрос: как получить сетевое имя компа по его адресу (функция WNetGetUser не возвращает толком ничего, пример из того же msdn'a не работает)
     
  7. irinak

    irinak New Member

    Joined:
    19 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Kurz, а разве функция NetShareEnum в первом парамере не выводит имена всех компов? Только вот как это получить? Может кто знает?
    У меня ещё вопрос: всё работает - выводится путь расшаренной папки, проверяю на своем компе - локалки нет. Вопрос: Как мне из консольки сделать MFC?
    Спасибочки)
     
  8. kurz

    kurz New Member

    Joined:
    5 Feb 2010
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Code:
    [B]servername [/B]
    Pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute.
    
    -первый параметр, это сетевое имя компа, к которому применяется функция.
    руками разве что...)
     
  9. irinak

    irinak New Member

    Joined:
    19 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Дельный совет!))))
    Исходничка бы не нашлось?)
     
  10. kurz

    kurz New Member

    Joined:
    5 Feb 2010
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    помоему чтото похожее я видел в книге "C++ глазами хакера". Могу и ошибаться
     
  11. Fruit

    Fruit Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    90
    Likes Received:
    22
    Reputations:
    1
    в настройках проекта тип приложения прописать + библиотеки + функции окна и пр., если я правильно понял.