Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ordnerfreigabe mit passwort (https://www.delphipraxis.net/10871-ordnerfreigabe-mit-passwort.html)

Tubos 3. Jul 2004 12:52

Re: ordnerfreigabe mit passwort
 
Wenn ich richtig informiert bin kann man unter Windows 2000 + XP keine Ordner mit Passwort freigeben.
Das geht nur mehr mit Benutzern.

edit:
komisch, anscheinend geht es bei dir doch :stupid:
aber dass das unter 2000 geht und unter xp nicht finde ich schon komisch

rai 4. Jul 2004 16:16

Re: ordnerfreigabe mit passwort
 
Zitat:

Zitat von NicoDE
Unter Win9x funktioniert es nicht.

Vielleicht helfen Dir die Prototypen weiter:
[..]
Zudem steht in den Strukturen ziemlicher Schrott,
[..]

Danke, für's probieren. Offenbar war die Funktion aus der JEDI-Libary auch nur für NT/XP gedacht.

Ich habe es jetzt mal nach deinen Vorschlägen geändert.
Nur die NetShareAddNt habe ich wie gehabt übernommen, da in deiner Version der Parameter buf eine Kostante ist und mir auf die schnelle nicht eingefallen ist, wie ich das dann anpassen muss. Und so funktioniert es auch :) Außerdem entspricht meine Version genau der Win32 API Doku..
Ich muss zugeben, dass ich die SHARE_INFO_50-Struktur selbst aus der API-Docu abgeleitet habe. :oops:
Wie müsste die denn aussehen?
Zitat:

Zitat von NicoDE
Delphi-Quellcode:
[..]
// *seufz*, wie wär's mit ne Variable?
[..]

Ja, gerne. Aber wo? wie? was? wofür? :gruebel:

Zitat:

Zitat von NicoDE
[..]
Und ein Rückgabewert hätte Deiner Funktion auch nicht schaden können :)
[..]

Den Rückgabewert hatte ich schon von selbst geändert: Ich hab mir gedacht ich geb einfach als Boolean zurück ob's geklappt hat. Wenn ich mich nicht irre, muss die NetShareAdd-Funktion NET_API_STATUS als 0 zurückgeben wenn alles ok ist.

Allerdings bleibt zu vermuten, dass auch die Funktion NetShareDel dann nur unter NT/XP funktioniert.
Vielleicht kannst du mir ja auch da noch einen Tipp geben.

Danke

Rai

NicoDE 4. Jul 2004 17:09

Re: ordnerfreigabe mit passwort
 
Zitat:

Zitat von Luckie
Aber du hast ihn doch noch hoffentlich?

Nö, ich hebe sowas nicht auf.

Zitat:

Zitat von vlees91
aber wenn man einen ordner mit einem passwort freigibt, und dann von einem anderen XP-PC aus darauf zugreift, kann man kein passwort eingeben und man bekommt die meldung:"Zugriff verweigert".
bei win 2k kommt eine passwort aufforderung. wieso kommt das nich bei win xp?

IIRC sollte das Problem nicht auftreten, wenn man in den Einstellungen der jeweiligen Netwerkverbindung die automatische Authentifizierung als Gast deaktiviert (ansonsten kannste immernoch 'Verbinden als...' probieren - Benutzer Gast (egal?) mit passendem Passwort).

Zitat:

Zitat von rai
Nur die NetShareAddNt habe ich wie gehabt übernommen, da in deiner Version der Parameter buf eine Kostante ist und mir auf die schnelle nicht eingefallen ist, wie ich das dann anpassen muss.

'const buf' definiert eine untypisierte Konstante (Du kannst als Paramater alles übergeben und die Funktion bekommt die Adresse übergeben - ist des gleiche wie buf: Pointer, nur das statt @info einfach info übergeben wird).

Zitat:

Zitat von rai
Ich muss zugeben, dass ich die SHARE_INFO_50-Struktur selbst aus der API-Docu abgeleitet habe. :oops:
Wie müsste die denn aussehen?

Die ist schon in Ordnung. Nur die Art und Weise des Füllens war alles andere als sinnvoll/sicher/sauber (Geschmacksfrage - 'es funktioniert' reicht mir persönlich nicht... zumindest für allgemein gültige Beispiele).


Gruss Nico

rai 4. Jul 2004 17:30

Re: ordnerfreigabe mit passwort
 
Zitat:

Zitat von NicoDE
[..]
(Geschmacksfrage - 'es funktioniert' reicht mir persönlich nicht... zumindest für allgemein gültige Beispiele).

Sehe ich auch so. Und ich würde gerne die Unit nochmal komplett veröffentlichen, wenn alles funktioniert - Kann sicher jeder mal gebrauchen. Daher sollte die Allgemeingültigkeit schon gegeben sein.

Dazu sollte aber auch alles stimmen, deshalb:
1. Hat sich nochmal jemand meine UnShareFldr bzw. die NetShareDel insbesondere in Hinblick auf Win9x/ME angesehen - XP funktioniert. Bzw.
2. Stimmt die Boolean-Auswertung des Rückgabe-Wertes NET_API_STATUS = 0 als true (Freigabe erfolgreich) sonst false?

Bin für alle Antworten dankbar

Rai

NicoDE 4. Jul 2004 18:01

Re: ordnerfreigabe mit passwort
 
Zitat:

Zitat von rai
1. Hat sich nochmal jemand meine UnShareFldr bzw. die NetShareDel insbesondere in Hinblick auf Win9x/ME angesehen - XP funktioniert.

Hab' ich im Moment nicht die Zeit für (ohne Delphi eh' gerade schlecht :))
Später vielleicht...

Zitat:

Zitat von rai
2. Stimmt die Boolean-Auswertung des Rückgabe-Wertes NET_API_STATUS = 0 als true (Freigabe erfolgreich) sonst false?

Bei einem Fehler wird es für den Benutzer einer Boolean-Funktion schwer herauszufinden was der Grund für den Fehler war (gibt es das Verzeichnis nicht, oder wurde es schon freigegeben, ...).

rai 4. Jul 2004 19:29

Re: ordnerfreigabe mit passwort
 
Zitat:

Zitat von NicoDE
Hab' ich im Moment nicht die Zeit für (ohne Delphi eh' gerade schlecht :))
Später vielleicht...

Da wäre ich echt dankbar. Vielleicht macht es ja auch kurz jemand anderes. :coder: Danke trotzdem :thuimb:

Zitat:

Zitat von NicoDE
Bei einem Fehler wird es für den Benutzer einer Boolean-Funktion schwer herauszufinden was der Grund für den Fehler war (gibt es das Verzeichnis nicht, oder wurde es schon freigegeben, ...).

Ist natürlich auch wieder richtig. Kennt zufällig jemand die möglichen Rückgabewerte und deren Bedeutung?
Danke :)

mischa 6. Jul 2004 02:42

Re: ordnerfreigabe mit passwort
 
Hallo zusammen,

ich habe eine Komponente gefunden (bei Torry), die auch unter Delphi 6 noch prima läuft. Hier wird auch ShareInfo2 und SharInfo50 verwendet. Allerdings bleibt ein Problem, dass ich nicht hinkriege (aber leider lösen muss):
Unter WinXP wird der Ordner immer mit Vollzugriff für jeden freigegeben! Will man unter W2K/XP eine Freigabe für einen oder mehrere Benutzer / Gruppen realisieren, muss man wohl oder übel SharInfo502 verwenden und einen SecurityDescriptor übergeben. Den erhält man über die Funktion GetSecurityInfo(). Hier muss man dann noch eine SID für den User angeben, die man mittels LookupAccountName() erhält. Soweit habe ich das verstanden (oder nicht? ;-) ).
Ich habe nur leider keinen Wrapper für GetSecurityInfo() gefunden. Hat jemand eine API-Lib dafür?
Mein Code bisher (in einer modifizierten Version der Routine "Share" der obigen Komponente):

Delphi-Quellcode:
    (...)
    // Erst die Buffergrößen ermitteln ...
    SidSize := 0;
    DomainNameSize := 0;
    LookupAccountName(nil, PChar(MyUserName), MyUserSID, SidSize, DomainName, DomainNameSize, SidType);
    // ... dann Speicher allokieren ...
    GetMem(MyUserSID, SidSize);
    DomainName := StrAlloc(DomainNameSize);
    // SID ermitteln
    LookupAccountName(nil, PChar(MyUserName), MyUserSID, SidSize, DomainName, DomainNameSize, SidType);
   
    // und jetzt:
    GetSecurityInfo(MyUserSID ...); // aber woher nehmen?!?

    PMySecDesc := @MySecDesc;

    MyShare.shi502_netname := PWideChar(MYName);
    MyShare.shi502_type := FResourceType;
    MyShare.shi502_remark := PWideChar(MYComment);
    MyShare.shi502_permissions := FNTPermissions;
    MyShare.shi502_max_uses := FMaxConnections;
    MyShare.shi502_current_uses := 0;
    MyShare.shi502_path := PWideChar(MyPath);
    MyShare.shi502_passwd := PWideChar(MyPW);
    MyShare.shi502_security_descriptor := PMySecDesc;
    (...)
Ich hoffe, das ist nicht zu chaotisch ... bin müde :oops:

mischa 6. Jul 2004 07:05

Re: ordnerfreigabe mit passwort
 
Ok, habe doch eine API-Conversation gefunden: GetSecurityInfo() wird in der unit JwaAclApi.pas der Win32API Conversation von Marcel van Brakel bei Jedi deklariert. Muss ich mal testen ... melde mich dann wieder ...

NicoDE 6. Jul 2004 09:40

Re: ordnerfreigabe mit passwort
 
Wenn Du keine Komponente mit einem Acl-Editor-Dialog verwendest (sprich, alles von von Hand schreiben willst), hast Du viel Arbeit vor Dir.

Wenn vordefinierte Accounts ('Jeder', 'Administratoren') ausreichen, kannst Du einige SID-Konstanten verwenden.

Beispiel unter http://www.entwickler-forum.de/webx?14@@.ee704fa/30


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz