Ordner freigeben?
-
hab ich eben ausprobiert, aber scheint nur mit Win9x zu funzen

Gibts da keine funktion für 2k/XP?
-
Ahh, ich hatte nur die falsche lib gelinkt!
Nachdem ich jetzt kompilieren konnte, kam mir schon der nächste Fehler entgegen, aber erstmal ein wenig Code:int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { NET_API_STATUS res; SHARE_INFO_2 p; DWORD parm_err = 0; // // 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(NULL, 2, (LPBYTE)&p, &parm_err); // // If the call succeeds, inform the user. // if(res==ERROR_INVALID_NAME) MessageBox(0,"Error im Filedings","0",0); if(res==0) MessageBox(0,"Share created.\n","0",0); // Otherwise, print an error, // and identify the parameter in error. // else MessageBox(0,"Error","0",0); .... return 0; }Das ist nahezu eine 1:1 übernahme der MSDN.
Leider funktioniert es nicht
Als Fehler erhalte ich von der NetShareAdd funtion immer 123 bzw. ERROR_INVALID_NAME.
woran könnte es liegen?mfg Perner
-
Es wird öfters ein LPWSTR erwartet, also ein Pointer auf einen Unicode-String - TEXT macht das aber afaik nur, wenn du die UNICODE / _UNICODE Kontante definiert hast. Nur warum das im Beispiel auch so gemacht wird

-
So tut das. Erst dann wird ein LPWSTR erwartet, wie flenders schon angedeutet hat.
#define UNICODE #define FORCE_UNICODE #include <windows.h> #include <lm.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { NET_API_STATUS res; SHARE_INFO_2 p; DWORD parm_err = 0; // // 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(NULL, 2, (LPBYTE)&p, &parm_err); // // If the call succeeds, inform the user. // if(res==ERROR_INVALID_NAME) MessageBox(0,TEXT("Error im Filedings"),TEXT("0"),0); if(res==0) MessageBox(0,TEXT("Share created.\n"),TEXT("0"),0); // Otherwise, print an error, // and identify the parameter in error. // else MessageBox(0,TEXT("Error"),TEXT("0"),0); return 0; }
-
Anstatt TEXT zu benutzen wäre es intelligenter L"" zu benutzen.
-
Dann kompiliert es nicht als ANSI-Version. Und die braucht man unter Win9x.
-
SHARE_INFO_2 gibts eh nur in der NT-Reihe.
Und dort wird immer ein Widestring verlangt.Keine Ahnung wie man das unter Win 9x macht.
-
ok, unter win 9x braucht man share_info_50.
-
danke für die Zahlreichen Antworten, doch trotz
#define UNICODE #define FORCE_UNICODESchmeißt mir die NetShareAdd funktion den Fehlercode 123 raus

Dieses Problem hab ich allerdings auch an den Rechnern in meiner Schule, also kanns an meinem Rechner nicht liegen. Das ist bestimmt wieder so n mini fehler der sich einfach nicht finden lässt
-
Also den Quellcode, den ich gepostet habe, solltest du 1:1 übernehmen können.
-
Also ich habe jetzt folgendes Programm:
#define UNICODE #define FORCE_UNICODE #include "stdafx.h" #include <windows.h> #include <lm.h> #pragma comment(lib, "Netapi32.lib") int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { NET_API_STATUS res; SHARE_INFO_2 p; DWORD parm_err = 0; // // 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(NULL, 2, (LPBYTE)&p, &parm_err); // // If the call succeeds, inform the user. // if(res==ERROR_INVALID_NAME) MessageBox(0,TEXT("Error im Filedings"),TEXT("0"),0); if(res==0) MessageBox(0,TEXT("Share created.\n"),TEXT("0"),0); // Otherwise, print an error, // and identify the parameter in error. // else MessageBox(0,TEXT("Error"),TEXT("0"),0); return 0; }Jedoch erhalte ich, aus mir unerfindlichen gründen, immernoch den 123 fehler

Hats bei dir funktioniert @dEUs? Und wenn ja, welches OS hast du?
-
Der Code tut bei mir. OS ist WinXP Pro SP2.
IDE ist VC++ 6.0 oder VS.NET 2003.
Allerdings schlägt NetShareAdd fehl, wenn die Freigabe bereits existiert. Allerdings nicht mit 123.
-
Komisch, ich habe auch WinXP und den VC++ 6.0, allerdings SP1 aber daran wird es nicht liegen. Ich versteh es net

-
Hi,
ich hab folgendes Problem zu der Thematik:Alle Freigaben, die mit NetShareAdd erstellt werden, lassen nur Vollzugriff zu.
Also auch beim Setzen von shi2_permissions = ACCESS_READ.
Dasselbe geschieht beim Benutzen der Fkt NetShareSetInfo.In der MSDN ist von einer SECURITY_DESCRIPTOR - Struktur die Rede.
Weiß jemand wie und wo man diese einbinden soll? Ich werde da nicht schlau daraus.
Oder weiß jemand, wie man die ReadOnly Eigenschaft der Freigabe setzen kann?Danke im Voraus.
MfG.
DaGus