CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - BCB6:Windows: Tworzenie katalogu jako zasobu udostępnionego

BCB6:Windows: Tworzenie katalogu jako zasobu udostępnionego

dział ogólny

BCB6:Windows: Tworzenie katalogu jako zasobu udostępnionego

Nowy postprzez samurai-jerry » poniedziałek, 20 czerwca 2011, 09:53

Witam,

W tutorialu pt."Jak zmienić atrybuty plików i folderów?" jest bardzo ładnie i przystępnie opisane jak zmienić atrybuty katalogu (faArchive, faReadOnly, faHidden, faSysFile).

Na obecnym etapie programowania jestem jeszcze trochę za mało doświadczony, więc mam pytanie do doświadczonych programistów:
Czy jest możliwość utworzenia katalogu i nadania mu praw zasobu sieciowego, tzn. udostępnienia tego katalogu w sieci jako zasobu sieciowego?
Przeszukałem to forum, nie udało mi się natrafić na jakąkolwiek wzmiankę na ten temat. Nie wiem, może źle szukałem (wówczas bardzo proszę o link do postu), może jeszcze ten temat nie był poruszany.
Wiem, że takie coś jest w jakiś sposób możliwe w środowisku Windows. Osobiście poszukam odpowiedzi w necie, ale może ktoś wie i jeśli to nie jest problem zechciałby podzielić się swoją wiedzą? ;)
Bardzo proszę o pomoc.

Pozdrawiam! samurai-jerry

Edit1:
Okey. Do tej pory doszedłem, że w C++ jest to zrobić ciężko (o ile w ogóle jest to możliwe). Robi się to za pomocą WinAPI.
W msdn'ie jest opisana ciekawa funkcja: "WNetAddConnection2"
Zaraz trochę bardziej nad tym popracuję :) i napiszę co wymyśliłem :)

Edit2:
W pl.comp.lang.c znalazłem jeszcze bardziej ciekawy przykład.
Właśnie próbuję go rozpracować i są linie kodu, które delikatnie mówiąc nie wiem co znaczą ;)
Przytoczę kod (wraz z moimi komentarzami) - oto on:
KOD cpp:     UKRYJ  
NET_API_STATUS res;  // ok. zmienna-uchwyt-zasób (handle)
                    // mówiąca o statusie zasobów sieciowych
SHARE_INFO_2 p; // ok. zmienna strukturalna z informacjami o
                // danym konkretnym zasobie
DWORD parm_err = 0; // ok. zmienna zwracająca typ rezultatu
                    //funkcji tworzącej zasób sieciowy

p.shi2_netname = L"TESTSHARE"; // ??? - tutaj nie bardzo wiem co autor (p.Sławek)
                               // miał na myśli
                               // chyba chodzi o nazwę sieci?
p.shi2_type = STYPE_PRINTQ;  // ??? - tutaj także nie wiem o co chodzi
p.shi2_remark = L"TESTSHARE (test NetShareAdd)"; // ??? - kolejna linijka, która
                                                 // jest dla mnie niewiadoma
p.shi2_permissions = 0; // ok. zero oznacza całkowite zezwolenie na
                        // udostępnianie zasobu (wszystkie grupy sieciowe)
p.shi2_max_uses = 4; // ??? - tutaj nie bardzo wiem.
                     // Domyślam się, że chodzi o maksymalną
                     // ilość JEDNOCZESNEGO korzystania z zasobu
p.shi2_current_uses = 0; // obecna ilość połączeń z zasobem sieciowym
p.shi2_path = L"C:\\MyFolder";  // katalog, który chcę udostępnić w sieci (autor)
p.shi2_passwd = NULL; // bez hasła (autor)

res=NetShareAdd(NULL, 2, (LPBYTE) &p, &parm_err); // chyba najważniejsza linijka
                                                  // gdzie następuje tworzenie zasobu

// sprawdzenie czy udało się utworzyć zasób sieciowy
if (res==0)   // udało się utworzyć zasób sieciowy
   {
   MessageBox("Udział utworzony.", "Info");
   }
   else
       // nie udało się utworzyć zasobu
       {
       char buf[128];
       sprintf(buf, "Error: %u\tparmerr=%u\n", res, parm_err);
       MessageBox(buf, "Error", MB_OK | MB_ICONERROR);
       };
 


Jest jeszcze kod przedstawiający jak odebrać prawa do udostępniania zasobu:
(Na razie tej części kodu nie będę komentował, bo chcę się skupić bardziej na poprzednim kodzie).
KOD cpp:     UKRYJ  
   NET_API_STATUS res = NetShareDel(NULL, L"TESTSHARE", 0);
   if(res==0)
       MessageBox("Udział usunięty.", "Info");
   else
   {
       char buf[128];
       sprintf(buf, "Error: %u", res);
       MessageBox(buf, "Error", MB_OK | MB_ICONERROR);
   };
 
"No pain no gain" - Scorpions
Avatar użytkownika
samurai-jerry
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): sobota, 19 lutego 2011, 19:04
Podziękował : 15
Otrzymał podziękowań: 0
System operacyjny: W98,W2K,WXP
Kompilator: Borland C++ Builder v6.0 Personal
wxDevCpp v.6.9
ChromeIDE+Masm32
KDevelop
Gadu Gadu: 0
    WindowsFirefox

Re: BCB6:Windows: Tworzenie katalogu jako zasobu udostępnionego

Nowy postprzez Cyfrowy Baron » poniedziałek, 20 czerwca 2011, 16:26

Jak rozumiem chcesz z poziomu własnej aplikacji udostępnić katalog w sieci?!

Co do zaprezentowanego kodu, to w pomocy do C++Builder 2010, jest na to gotowy kod:

KOD cpp:     UKRYJ  
#define UNICODE
#include <windows.h>
#include <stdio.h>
#include <lm.h>

void wmain( int argc, TCHAR *argv[ ])
{
   NET_API_STATUS res;
   SHARE_INFO_2 p;
   DWORD parm_err = 0;

   if(argc<2)
      printf("Usage: NetShareAdd server\n");
   else
   {
      //
      // Fill in the SHARE_INFO_2 structure.
      //
      p.shi2_netname = TEXT("TESTSHARE");    
      p.shi2_type = STYPE_DISKTREE; // disk drive
      p.shi2_remark = TEXT("TESTSHARE to test NetShareAdd");
      p.shi2_permissions = 0;    
      p.shi2_max_uses = 4;
      p.shi2_current_uses = 0;    
      p.shi2_path = TEXT("C:\\");
      p.shi2_passwd = NULL; // no password
      //
      // Call the NetShareAdd function,
      //  specifying level 2.
      //
      res=NetShareAdd(argv[1], 2, (LPBYTE) &p, &parm_err);
      //
      // If the call succeeds, inform the user.
      //
      if(res==0)
         printf("Share created.\n");
     
      // Otherwise, print an error,
      //  and identify the parameter in error.
      //
      else
         printf("Error: %u\tparmerr=%u\n", res, parm_err);
   }
   return;
}


Kod jest opracowany dla aplikacji konsolowej (funkcja wmain - main), ale nic nie stoi na przeszkodzie, by użyć tego kodu w aplikacji okienkowej.

Szczegółowy opis elementów struktury SHARE_INFO_2 znajduje się w pliku pomocy pod hasłem o dokładnie takiej nazwie. Jeżeli nie masz w BCB 6 takiej struktury to ten kod na nic się Tobie nie przyda.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
samurai-jerry
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6:Windows: Tworzenie katalogu jako zasobu udostępnionego

Nowy postprzez samurai-jerry » poniedziałek, 20 czerwca 2011, 17:06

Cyfrowy Baron napisał(a):Jak rozumiem chcesz z poziomu własnej aplikacji udostępnić katalog w sieci?!

Dokładnie tak chcę zrobić.

Cyfrowy Baron napisał(a):Co do zaprezentowanego kodu, to w pomocy do C++Builder 2010, jest na to gotowy kod:


Chyba będę musiał pomęczyć się jednak z WinAPI ponieważ jeszcze używam -choć może się to wydać śmieszne- środowiska Borland C++ Builder v.6.0.

Niezależnie od wszystkiego i tak dziękuję za kod. Teraz już wiem, skąd wzięły się te nazwy zmiennych strukturalnych w kodzie który przedstawiłem na samym początku. One po prostu są wbudowane w którąś z tych nowych bibliotek Borlanda C++ Buildera 2010. Zakładam, że chodzi o bibliotekę: <lm.h>
Zastanawiam, się czy gdyby posiadać tą bibliotekę wystarczyłoby to do używania zmiennych ze struktury SHARE_INFO_2.
Teoretycznie powinno się udać, ale w praktyce może być różnie, bo nie wiem co ta biblioteka zawiera. Jeśli zawiera jakieś inne nowe biblioteki, to wiadomo :) -tak łatwo się nie da.

Jeszcze raz WIELKIE DZIĘKI Cyfrowy Baronie! :)

Pozdrawiam! samurai-jerry
"No pain no gain" - Scorpions
Avatar użytkownika
samurai-jerry
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): sobota, 19 lutego 2011, 19:04
Podziękował : 15
Otrzymał podziękowań: 0
System operacyjny: W98,W2K,WXP
Kompilator: Borland C++ Builder v6.0 Personal
wxDevCpp v.6.9
ChromeIDE+Masm32
KDevelop
Gadu Gadu: 0
    WindowsFirefox

Re: BCB6:Windows: Tworzenie katalogu jako zasobu udostępnionego

Nowy postprzez Cyfrowy Baron » poniedziałek, 20 czerwca 2011, 20:09

samurai-jerry napisał(a):Zastanawiam, się czy gdyby posiadać tą bibliotekę wystarczyłoby to do używania zmiennych ze struktury SHARE_INFO_2.


Biblioteka im.h zawiera tylko nagłówek funkcji, nie jest więc w pełni funkcjonalną biblioteką i jest podłączona do innych plików. Przenieść tego do BCB 5 się nie da gdyż C++Builder 2010 używa już typu UnicodeString i wchar_t i ta biblioteka również.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
samurai-jerry
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 2 gości