![]() |
Ordnerfreigabe: Problem mit Read Only-Freigabe
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:
Das Problem:
if not ShareDir(ExcludeTrailingPathDelimiter(label3.caption), 'koffein', '', True) then
//... 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; //[...] |
Re: Ordnerfreigabe: Problem mit Read Only-Freigabe
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 |
Re: Ordnerfreigabe: Problem mit Read Only-Freigabe
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 :hi: |
Re: Ordnerfreigabe: Problem mit Read Only-Freigabe
weil eben unter xp die Rechtevergabe anders funktioniert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr. |
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