AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Ordnerfreigabe: Problem mit Read Only-Freigabe
Thema durchsuchen
Ansicht
Themen-Optionen

Ordnerfreigabe: Problem mit Read Only-Freigabe

Ein Thema von TillWe · begonnen am 23. Sep 2006 · letzter Beitrag vom 23. Sep 2006
Antwort Antwort
TillWe

Registriert seit: 20. Apr 2005
26 Beiträge
 
#1

Ordnerfreigabe: Problem mit Read Only-Freigabe

  Alt 23. Sep 2006, 19:39
Hallo,
ich möchte einen Orner im Netzwerk freigeben. Allerdings soll auf das Verzeichnis vom Netzwerk aus nur lesend zugegriffen werden.
Hierzu habe ich zunächst die Funkition ShareDir verwendet, aus dem Easy Delphi Helper von dsdt.info:
Delphi-Quellcode:
if not ShareDir(ExcludeTrailingPathDelimiter(label3.caption), 'koffein', '', True) then
//...
Das Problem:
Der Ordner wird zwar freigegeben aber immer mit Schreizugriff, also nicht readonly!
Weiß jemand Abhilfe bzw. woran das liegen könnte?

mfg

Hier noch mal zur besseren Info die Funktion aus dem Easy Helper (so wie ich sie eingebunden habe):
Delphi-Quellcode:
unit types_functions_u;
uses
 //[...]
interface
const
SType_DiskTree = 0;
Access_Read = 1;
Access_All = 127;
Nerr_Success = 0;

type
TShareInfo2ExW = record
 shi2_NetName: PWideChar;
 shi2_Type: Longword;
 shi2_Remark: PWideChar;
 shi2_Permissions: Longword;
 shi2_Max_Uses: Longword;
 shi2_Current_Uses: Longword;
 shi2_Path: PWideChar;
 shi2_Passwd: PWideChar;
end;

TShareInfo2ExA= record
 shi2_NetName: PAnsiChar;
 shi2_Type: Longword;
 shi2_Remark: PAnsiChar;
 shi2_Permissions: Longword;
 shi2_Max_Uses: Longword;
 shi2_Current_Uses: Longword;
 shi2_Path: PAnsiChar;
 shi2_Passwd: PAnsiChar;
end;

type
TNetShareAddFunc = function (servername: PChar; level: Longword;
                             const buf: Pointer;
                             parm_err: PLongWord): LongWord; stdcall;
 //[...]
function ShareDir(const ADir, AName, APassword: WideString; ReadOnly: Boolean): Boolean;
 //[...]

implementation


function ShareDirA(const ADir, AName, APassword: string; ReadOnly: Boolean): Boolean;
var
Info: TShareInfo2ExA;
Err: Longword;

Lib: THandle;
NetShareAddFunc: TNetShareAddFunc;
begin
Result:=False;
Lib:= LoadLibrary('Svrapi.dll');

if Lib <> 0 then
begin
  try
    @NetShareAddFunc:= GetProcAddress(Lib,'NetShareAdd');
    if @NetShareAddFunc <> nil then
    begin
       FillChar(Info, SizeOf(Info), 0);
       Info.shi2_netname := PAnsiChar(AName);
       Info.shi2_type := SType_DiskTree;
       Info.shi2_remark := nil;
       if ReadOnly then
         Info.shi2_permissions := Access_Read
       else
         Info.shi2_permissions := Access_All;
       Info.shi2_max_uses := LongWord(-1);
       Info.shi2_current_uses := 0;
       Info.shi2_path := PAnsiChar(ADir);
       Info.shi2_passwd := PAnsiChar(APassword);
       Result := NetShareAddFunc(nil, 2, @Info, @Err) = NERR_SUCCESS;
    end
    else
      RaiseLastOSError;
  finally
    FreeLibrary(Lib);
  end;
end;
end;

function ShareDirW(const ADir, AName, APassword: WideString; ReadOnly: Boolean): Boolean;
var
Info: TShareInfo2ExW;
Err: Longword;

Lib: THandle;
NetShareAddFunc: TNetShareAddFunc;
begin
Result:=False;
Lib:= LoadLibrary('Netapi32.dll');

if Lib <> 0 then
begin
  try
    @NetShareAddFunc:= GetProcAddress(Lib,'NetShareAdd');
    if @NetShareAddFunc <> nil then
    begin
     FillChar(Info, SizeOf(Info), 0);
     Info.shi2_netname := PWideChar(AName);
     Info.shi2_type := SType_DiskTree;
     Info.shi2_remark := nil;
     if ReadOnly then
       Info.shi2_permissions := Access_Read
     else
       Info.shi2_permissions := Access_All;
     Info.shi2_max_uses := LongWord(-1);
     Info.shi2_current_uses := 0;
     Info.shi2_path := PWideChar(ADir);
     Info.shi2_passwd := PWideChar(APassword);
     Result := NetShareAddFunc(nil, 2, @Info, @Err) = Nerr_Success;
    end
    else
      RaiseLastOSError;
  finally
    FreeLibrary(Lib);
  end;
end;
end;

function ShareDir(const ADir, AName, APassword: WideString; ReadOnly: Boolean): Boolean;
begin
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
  Result := ShareDirA(ADir, AName, APassword, ReadOnly)
else
  Result := ShareDirW(ADir, AName, APassword, ReadOnly);
end;
 //[...]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Ordnerfreigabe: Problem mit Read Only-Freigabe

  Alt 23. Sep 2006, 20:59
Hallo Till,

es könnte sein, dass es egal ist, was du als permission einträgst:

Microsoft schreibt im Platform SDK

shi2_permissions

Specifies a DWORD value that indicates the shared resource's permissions for servers running with share-level security. A server running user-level security ignores this member. This member can be one or more of the following values. Calls to the NetShareSetInfo function ignore this member.
Note that the Windows Server 2003 family, Windows XP, Windows 2000, and Windows NT do not support share-level security.

Gute Nacht

marabu
  Mit Zitat antworten Zitat
TillWe

Registriert seit: 20. Apr 2005
26 Beiträge
 
#3

Re: Ordnerfreigabe: Problem mit Read Only-Freigabe

  Alt 23. Sep 2006, 22:02
Versteh das Zitat aus dem SDK nur halb.
Es geht um die Checkbox "Netzwerkbenutzer dürfen Dateien verändern".
Manuell kann ich diese (de)aktivieren. Wenn ich aber den Ordner aus einem Delphiprogramm heraus freigeben möchte ist er immer aktiviert, d.h. ich muß ihn wieder manuell deaktivieren.

Naja, erstmal danke und gute Nacht
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Ordnerfreigabe: Problem mit Read Only-Freigabe

  Alt 23. Sep 2006, 22:14
weil eben unter xp die Rechtevergabe anders funktioniert.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz