BCB6:Windows: Tworzenie katalogu jako zasobu udostępnionego
Napisane: 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:
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).
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);
};
// 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);
};
if(res==0)
MessageBox("Udział usunięty.", "Info");
else
{
char buf[128];
sprintf(buf, "Error: %u", res);
MessageBox(buf, "Error", MB_OK | MB_ICONERROR);
};