Ordner im Netzwerk freigeben
-
Ich suche eine Möglichkeit einen Ordner freizugeben, per Code.
Viel zu sagen gibts da ja nicht
.Was alles für rechte das sein müssen etc. ist mir egal.
-
Stichwort NetShareAdd etc.
-
gut NetShareAdd() ist schon mal ok, aber folgender Code gibt immer eine (eigene) Fehlermeldung zurück:
NET_API_STATUS res; SHARE_INFO_2 p; DWORD parm_err = 0; p.shi2_netname = L"NSHARE1"; p.shi2_type = STYPE_DISKTREE; // disk drive <- das heißt ? liegt hier etwa ein Problem p.shi2_remark = L"NSA1"; p.shi2_permissions = 0; p.shi2_max_uses = 4; p.shi2_current_uses = 0; p.shi2_path = sReadValue.w_str(); p.shi2_passwd = NULL; // no password <- Ok gut res=NetShareAdd(L"NSA2", 2, (LPBYTE) &p, &parm_err); // <- wozu sind Param 1&2 ? (1 = Name ? von was denn ?) // Param 2 (siehe msdn: "information level 2" AHH JA) if(res!=0) AContext->Connection->IOHandler->WriteLn("Net Share Problem - restricted folder ?"); else AContext->Connection->IOHandler->WriteLn("Net Share Successfull - Dir: " + sReadValue);sReadValue = Pfad.
letzen 4 Zeilen sind zurückgaben an einen Socket. Er gibt immer Net Share Problem zurück.
Brauche zu der fkt noch etwas verständnis und einsatzhilfeEDIT: Ich glaube schlafen wär jetzt nicht schlecht ?
-
bevor ich mir ruhe gönne:
NET_API_STATUS res; SHARE_INFO_2 p; DWORD parm_err = 0; p.shi2_netname = L"NSHARE1"; ; p.shi2_type = STYPE_DISKTREE; // disk drive p.shi2_remark = L"NSA1"; p.shi2_permissions = 0; p.shi2_max_uses = 4; p.shi2_current_uses = 0; p.shi2_path = sReadValue.w_str(); p.shi2_passwd = NULL; // no password res=NetShareAdd(L"NSA2", 2, (LPBYTE) &p, &parm_err); String ErrMsg; if(res==0) ErrMsg = "Successfully created"; else if(res==ERROR_ACCESS_DENIED) ErrMsg = "ERROR_ACCESS_DENIED"; else if(res==ERROR_INVALID_LEVEL) ErrMsg = "ERROR_INVALID_LEVEL"; else if(res==ERROR_INVALID_NAME) ErrMsg = "ERROR_INVALID_NAME"; else if(res==ERROR_INVALID_PARAMETER) ErrMsg = "ERROR_INVALID_PARAMETER"; else if(res==NERR_DuplicateShare) ErrMsg = "NERR_DuplicateShare"; else if(res==NERR_RedirectedPath) ErrMsg = "NERR_RedirectedPath"; else if(res==NERR_UnknownDevDir) ErrMsg = "NERR_UnknownDevDir"; else ErrMsg = "Unknown Error"; AContext->Connection->IOHandler->WriteLn(ErrMsg);"Unknown Error" - Na Supi
btw: er braucht, etwa 5-8 sec, bis er aufgibt.
-
also kennst du das "switch-case" statement?
-
ach das geht auch mit dem typ ? Ist int ähnlich ? ok ja.
trotzdem trägt das nicht sehr produktiv bei.
2. ES WAR 4 UHR !
-
AHHH jetzt hab ich es gerafft:
char com_name[255]; DWORD nSize = sizeof(com_name); GetComputerName(com_name, &nSize); String CN = com_name; NET_API_STATUS res; SHARE_INFO_2 p; DWORD parm_err = 0; p.shi2_netname = L"NSHARE1"; // Name der Netz ressource& erster Parameter = Computername ! (CN im Beispiel)
AHHH !
Gut nun geht es !
-
Oh mein GOTT !
OH MEIN GOTT !Boolean InvName = true; String ErrMsg; int ShareNum = 0; while (InvName) { ShareNum++; String ShareName = "netshare " + IntToStr(ShareNum); p.shi2_netname = ShareName.w_str(); try { res=NetShareAdd(CN.w_str(), 2, (LPBYTE) &p, &parm_err); ErrMsg = "Successfully created nsharename: "; ErrMsg += ShareName; } catch(...) { if(res==0) ErrMsg = "Successfully created"; else if(res==ERROR_ACCESS_DENIED) ErrMsg = "ERROR_ACCESS_DENIED"; else if(res==ERROR_INVALID_LEVEL) ErrMsg = "ERROR_INVALID_LEVEL"; else if(res==ERROR_INVALID_NAME) { ErrMsg = "ERROR_INVALID_NAME"; } else if(res==ERROR_INVALID_PARAMETER) ErrMsg = "ERROR_INVALID_PARAMETER"; else if(res==NERR_DuplicateShare) ErrMsg = "NERR_DuplicateShare"; else if(res==NERR_RedirectedPath) ErrMsg = "NERR_RedirectedPath"; else if(res==NERR_UnknownDevDir) ErrMsg = "NERR_UnknownDevDir"; else ErrMsg = "Unknown Error"; if (res != ERROR_INVALID_NAME) { InvName = false; } } }Das hat verdammtnochmal 20141 RESOURCEN ERSTELLT !!!
Zum Glück nur auf einen Ordner, so dass sich das beheben lies und zum Glück hat mein Server ein 10 Sek timeout sonst hätt der noch weiter gemacht !.Hier das bild, ist ein Mahnmal zur sicherheit:
http://picfront.de/d/2KqWZn4T/GEFHRLICH.JPG
PS: kann das einer korrigieren und verschönern

-
Wuahahahahaa

-
Hallo,
man muss sich nicht wundern, dass die while-Schleife nicht verlassen wird, wenn InvName nie false wird, weil keine Exception geworfen wird (wozu hier try-catch, in dem auch noch "Successfully created" vorkommt
) 
MfG,
Probe-Nutzer
-
hmm ja ist mir (ausgeschlafen) auch aufgefallen und hab es korigiert.
Da war ich zu müde zum denken.
Aber lustig war das ergebnis schon.Ich hab dann später die Schleife ausgebaut, und ein System, mit dem man selbst den Namen bestimmen kann.