Ordner freigeben?



  • 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_UNICODE
    

    Schmeiß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


Anmelden zum Antworten