Feststellen ob ein Verzeichniss(lokal) freigegeben ist oder nicht



  • Probiers mal mit \\ vor dem Servernamen
    Oder beim Pfad vielleicht mit einer absoluten Pfadangabe, also z.B. c:\test - oder ist das der Name der Freigabe 😕



  • also das mit den beiden \\ is laut docu nur bei winNT 4 und kleiner notwendig und ab win2k nicht mehr. Aber auch wenn ich es davor schreibe kommt das selbe raus 😞

    das test bzw test1 ist der freigabe name wie ich es auch in der klammer stehen hab 🙂

    aber wenn ich einen absoluten pfad angebe bekomme ich immer 0(sprich laut doku dass das device freigegeben ist) als return zurück egal ob das verzeichniss fregeben ist oder nicht.
    Durch angabe eines absoluten pfads bekommt man wohl immer0 zurück sollange das verzeichniss auch existiert.
    Aber das will ich ja nicht 🙂 ich will ja wissen ob es freigebene ist sprich ob man auf das verzeichniss per netzwerk über einen andren pc zugreifen kann.

    Aber das beste is ja ich hab die neuste platform sdk von MS runtergeladen und wenn ich mit installierter SDK versuche das beispiel zu übersetzen(es stammt sogar aus der doku von der SDK) dann meckert der compiler das er nicht **unsigned short *** in **char *** Konvertieren kann. 😃

    [ Dieser Beitrag wurde am 26.02.2003 um 15:50 Uhr von firefly editiert. ]



  • Mir ist gerade eine andere Möglichkeit eingefallen. Öffne doch einfach eine Datei, die in dem zu überprüfenden Verzeichnis ist. Wenn du sie öffnen kannst, ist das Verzeichnis freigegeben, sonst nicht.
    Dazu eignet sich wohl am besten die Datei "NULL", weil sie in jedem Verzeichnis ist! Sie kann nur zum schreiben geöffnet werden!

    [ Dieser Beitrag wurde am 26.02.2003 um 16:12 Uhr von D@niel $chumann editiert. ]



  • Hmm ich glaube Du verstehst nicht ganz was ich vorhabe oder ?:)
    oder ich versteh net was du mit deinem vorschlag genau meinst. 🙂

    Also ich möchte ein programm schreiben, mit dem ich feststellen kann ob ein Verzeichniss im Netzwerk freigegeben ist oder nicht.
    Diese Programm wird dann auf dem Pc laufen auf dem auch das Verzeichniss ist. Dadurch nützt mir dein Vorschlag nichts.

    Das später fertige Programm soll dann die erweiterten Möglichkeiten der Verzeichniss freigabe, wie sie in Win2k/WinXP Prof. vorhanden sind (z.B. vergabe der genauen zugriffs rechte für verschiedene Benutzer), WinXP Home zur Verfügung stellen.

    Aber wenn ich nichtmal zuverlässig herausfinden kann ob ein Verzeichniss freigegeben ist oder nicht brauch ich nicht am rest des Programms weiterschreiben.(Obwohl ich da noch ganz am anfang bin :))

    [ Dieser Beitrag wurde am 26.02.2003 um 16:32 Uhr von firefly editiert. ]



  • Habs kapiert 🙄 und hab keine Ahnung, wie das gehen könnte

    BTW: jetzt haben wir uns beide einmal nicht verstanden



  • @D@niel $chumann : Dein Vorschlag ist leider nicht das passende für mein vorhaben.
    Denn ich kann die datei NULL zum schreiben öffnen egal ob das verzeichniss im netzwerk freigegeben ist oder nicht.



  • Ich hab mal nach NetShareCheck bei google gesucht und folgendes gefunden:

    NetShareCheck() tests whether a directory (or, more generally, a device like LPT1) is reachable from the outside through a share. This includes being located in the subtree of a shared directory: if C:\FOO is shared, then C:\FOO\BAR is, too. (This makes NetShareCheck() pretty useless, because by default, every disk volume has an administrative share associated with its root directory.) Also note that devices -- drive letters, names of LPTs, etc. -- must be in upper case.

    D.h., es sieht eher schlecht aus (sofern die Quelle stimmt 😉 ) 😞



  • Aber vielleicht ließe sich dein Problem mit Hilfe anderer Share Functions lösen?! z.B. mit NetShareEnum or NetShareGetInfo 🙂



  • mit NetShareGetInfo gehts genausowenig (hab ich schon probiert :)) aber mit NetShareEnum könnte es gehen. Aber ich hab schon ne andere Möglichkeit gefunden 🙂

    Denn die ganzen freigegebenen Verzeichnisse werden in der Registry gespeichert 🙂
    und durch folgenden Code lässt sich der Wert auslesen :

    HKEY pShare;
          char ca[64000];
          DWORD dwBufLen=256;
    
          devType = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SYSTEM\\ControlSet001\\Services\\lanmanserver\\Shares"), NULL, KEY_READ/*KEY_QUERY_VALUE*/, &pShare);
    
            devType1 = RegQueryValueEx(pShare, "bochs", NULL, NULL,NULL, &dwBufLen);
            devType1 = RegQueryValueEx(pShare, "bochs", NULL, NULL,(LPBYTE) ca, &dwBufLen);
    
            unsigned int begin = 0;
    
                    for(unsigned int ipos=0; ipos<64000; ipos++)
    
                    {
    
                        if(ca[ipos] == '\0')
    
                        {
    
                            string s;
    
                            for(unsigned int ipos2=begin; ipos2 < ipos; ipos2++)
    
                            {
    
                                s += ca[ipos2];
    
                            }
    
                            vsText.push_back(s);
    
                            begin = ipos+1;
    
                            if(ca[begin] == '\0') break;
    
                        }   
                    }
    

    den hab ich nachdem ich das mit der Registry rausgefunden hatte im inet gefunden 🙂
    so jetzt bin ich schon ienen schritt weiter auf meinem weg der Fertigstellung 🙂 😃



  • so jetzt muss ich nur noch herausfinden wie ich am besten die rechte
    in der ACLs des verzeichnisses und deren enthaltenen dateien verändern/ergänzen kann 🙂

    Aber das ist ein anderes Thema. Wenn ich da probs habe komme ich wieder.
    Denn hier wird wird auf freundliche weise versucht einem zu helfen auch wenn es nicht immer klappt 🙂

    gruß

    firefly

    [ Dieser Beitrag wurde am 26.02.2003 um 18:50 Uhr von firefly editiert. ]


Anmelden zum Antworten