AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ordnerfreigabe mit passwort

Offene Frage von "rai"
Ein Thema von Remote1 · begonnen am 27. Okt 2003 · letzter Beitrag vom 6. Jul 2004
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Remote1
Remote1

Registriert seit: 22. Okt 2003
Ort: Dippoldiswalde
252 Beiträge
 
Delphi 6 Personal
 
#11

Re: ordnerfreigabe mit passwort

  Alt 22. Nov 2003, 11:52
also ich hab Me aber wie immer soll es natürlich auch bei allen anderen funzen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: ordnerfreigabe mit passwort

  Alt 22. Nov 2003, 13:13
Moin Remote,

dann schau Dir mal im PSDK oder im MSDN die Funktion NetShareAdd mit der Struktur share_info_50 an.
In jedem Falle muss man zwischen 9x/ME und NT/W2K/XP unterscheiden, und die Funktion dynamisch importieren, da sie sich zwischen diesen beiden Betriebssystem Bereichen unterscheiden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
rai

Registriert seit: 1. Jul 2004
10 Beiträge
 
#13

Re: ordnerfreigabe mit passwort

  Alt 1. Jul 2004, 15:52
Zitat von Christian Seehase:
Moin Remote,

dann schau Dir mal im PSDK oder im MSDN die Funktion NetShareAdd mit der Struktur share_info_50 an.
In jedem Falle muss man zwischen 9x/ME und NT/W2K/XP unterscheiden, und die Funktion dynamisch importieren, da sie sich zwischen diesen beiden Betriebssystem Bereichen unterscheiden.
Hallo

mal eine Frage zu einem alten Thema:
Ich hab die Doku zur NetShareAdd gefunden und verstanden. Aber wo liegt der Unterscheid zwischen 9x/ME und NT/XP?
Und wie bekommt man diese gemeinen C-Strukturen (SHARE_INFO_2 und SHARE_INFO_502) mit der Funktion hin?

Danke an alle die schlauer sind als ich!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: ordnerfreigabe mit passwort

  Alt 1. Jul 2004, 16:03
Moin rai,

da gibt es diverse Unterschiede, mal abgesehen vom Namen.
Zum einen befindet sich die Funktion auf den unterschiedlichen Betriebssystemschienen in unterschiedlichen DLLs, so dass man die Funktion dynamisch importieren muss.
Dann haben sie unterschiedliche Parameter, und Datenstrukturen.

Was meinst Du jetzt bei den Datenstrukturen mit "hinbekommen"?

[EDIT]
z.B. hier

Freigabe unter Windows erstellen

kannst Du auch ein Beispiel finden

Oder such' mal selber nach Hier im Forum suchenNetShareAdd
[/EDIT]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
rai

Registriert seit: 1. Jul 2004
10 Beiträge
 
#15

Re: ordnerfreigabe mit passwort

  Alt 2. Jul 2004, 23:08
Zitat von Christian Seehase:
Moin rai,
Was meinst Du jetzt bei den Datenstrukturen mit "hinbekommen"?
Ich habe leider keine Ahnung wie ich so komplexe C-Strukturen, wie Net_Share_Add sie als Parameter haben will, zum einen in Delphi realisierund und zweitens dann auch noch erfolgreich übergebe

Vielleicht kannst du ja mal (kurz) schreiben wo die Funktionen in 9x/ME und NT/XP zu finden sind bzw. wie man Sie anspricht. (Wenn es hilft, ich habe hier die Win32 API Dokumentation da - nur keine Ahnung welche Version )

Danke

PS: Den Code unter dem Link konnte ich leider noch nicht ausprobieren - aber den für Win9x/ME hab ich dort auch nicht gefunden.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: ordnerfreigabe mit passwort

  Alt 2. Jul 2004, 23:14
Moin Rai,

hast Du Dir mal angeschaut, was die beiden Links in meinem letzten Posting zu Tage fördern?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
rai

Registriert seit: 1. Jul 2004
10 Beiträge
 
#17

Re: ordnerfreigabe mit passwort

  Alt 3. Jul 2004, 04:15
Zitat von Christian Seehase:
Moin Rai,

hast Du Dir mal angeschaut, was die beiden Links in meinem letzten Posting zu Tage fördern?
Moin! Ja, das habe ich nochmal gemacht.

Und in einer Nachtschicht ist jetzt folgende Unit entstanden:
(Die wesentichen Teile stammen aus der JEDI-API Libary)
Delphi-Quellcode:
unit LANShare;

interface

uses Windows, Sysutils ;

  procedure shareFldr(path,netname,password:String;hidden:Boolean);
  procedure UnshareFldr(netname:String;hidden:Boolean);

  Type LMSTR = Windows.LPWSTR;
    LPBYTE = Windows.PBYTE;
    NET_API_STATUS = DWORD;

  function NetShareAdd(servername: LMSTR; level: DWORD; buf: LPBYTE; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  function NetShareDel(servername, netname: LMSTR; reserved: DWORD): NET_API_STATUS; stdcall;

  type
    LPSHARE_INFO_2 = ^SHARE_INFO_2;
    PSHARE_INFO_2 = ^SHARE_INFO_2;
    _SHARE_INFO_2 = record
      shi2_netname: LMSTR;
      shi2_type: DWORD;
      shi2_remark: LMSTR;
      shi2_permissions: DWORD;
      shi2_max_uses: DWORD;
      shi2_current_uses: DWORD;
      shi2_path: LMSTR;
      shi2_passwd: LMSTR;
    end;
    SHARE_INFO_2 = _SHARE_INFO_2;
    TShareInfo2 = SHARE_INFO_2;
    PShareInfo2 = PSHARE_INFO_2;

    LPSHARE_INFO_50 = ^SHARE_INFO_50;
    PSHARE_INFO_50 = ^SHARE_INFO_50;
    _SHARE_INFO_50 = record
       shi50_netname: array [0..12] of Char;
       shi50_type: Byte;
       shi50_flags: Word;
       shi50_remark: PChar;
       shi50_path: PChar;
       shi50_rw_password: array [0..8] of Char;
       shi50_ro_password: array [0..8] of Char;
    end;
    SHARE_INFO_50 = _SHARE_INFO_50;
    TShareInfo50 = SHARE_INFO_50;
    PShareInfo50 = PSHARE_INFO_50;

const

// share_info_2.permissions
  ACCESS_READ = $01;
  ACCESS_WRITE = $02;
  ACCESS_CREATE = $04;
  ACCESS_EXEC = $08;
  ACCESS_DELETE = $10;
  ACCESS_ATRIB = $20;
  ACCESS_PERM = $40;

  ACCESS_GROUP = $8000;

  ACCESS_NONE = 0;
  ACCESS_ALL = (ACCESS_READ or ACCESS_WRITE or ACCESS_CREATE or ACCESS_EXEC or ACCESS_DELETE or ACCESS_ATRIB or ACCESS_PERM);

// parm_err
  SHARE_NETNAME_PARMNUM = 1;
  SHARE_TYPE_PARMNUM = 3;
  SHARE_REMARK_PARMNUM = 4;
  SHARE_PERMISSIONS_PARMNUM = 5;
  SHARE_MAX_USES_PARMNUM = 6;
  SHARE_CURRENT_USES_PARMNUM = 7;
  SHARE_PATH_PARMNUM = 8;
  SHARE_PASSWD_PARMNUM = 9;
  SHARE_FILE_SD_PARMNUM = 501;

// share_info_2.shi2_type and share_info_50.shi50_type
  STYPE_DISKTREE = 0;
  STYPE_PRINTQ = 1;
  STYPE_DEVICE = 2;
  STYPE_IPC = 3;

  STYPE_TEMPORARY = $40000000; // share_info_2 only
//STYPE_TEMPORARY = $40; // share_info_50 only
  STYPE_SPECIAL = DWORD($80000000); // share_info_2 only
//STYPE_SPECIAL = $80; // share_info_50 only

// share_info_50.shi50_flags
  SHI50F_RDONLY = 1;
  SHI50F_FULL = 2;
  SHI50F_ACCESSMASK = (SHI50F_RDONLY or SHI50F_FULL);
  SHI50F_PERSIST = $0100;
  SHI50F_SYSTEM = $0200;

// share_info_2.max_uses
  SHI_USES_UNLIMITED = DWORD(-1);

implementation

function NetApi32 : String ;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then Result:='netapi32.dllelse Result:='Svrapi.dll';
end;

function GetModuleHandle(lpModuleName: LPCSTR): HMODULE; stdcall; external kernel32 name 'GetModuleHandleA';
function LoadLibrary(lpLibFileName: LPCSTR): HMODULE; stdcall; external kernel32 name 'LoadLibraryA';
function GetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; stdcall; external kernel32 name 'GetProcAddress';

procedure GetProcedureAddress(var P: Pointer; const ModuleName, ProcName: string);
var
  ModuleHandle: HMODULE;
begin
  if not Assigned(P) then
  begin
    ModuleHandle := GetModuleHandle(PChar(ModuleName));
    if ModuleHandle = 0 then
    begin
      ModuleHandle := LoadLibrary(PChar(ModuleName));
      if ModuleHandle = 0 then raise Exception.Create('Library not found: ' + ModuleName);
    end;
    P := GetProcAddress(ModuleHandle, PChar(ProcName));
    if not Assigned(P) then raise Exception.Create('Function not found: ' + ModuleName + '.' + ProcName);
  end;
end;

var
  _NetShareAdd: Pointer;

function NetShareAdd;
begin
  GetProcedureAddress(_NetShareAdd, netapi32, 'NetShareAdd');
  asm
    mov esp, ebp
    pop ebp
    jmp [_NetShareAdd]
  end;
end;


var
  _NetShareDel: Pointer;

function NetShareDel;
begin
  GetProcedureAddress(_NetShareDel, netapi32, 'NetShareDel');
  asm
    mov esp, ebp
    pop ebp
    jmp [_NetShareDel]
  end;
end;


procedure shareFldr(path,netname,password:String;Hidden:Boolean);
var
share: TShareInfo2;
share50: TShareInfo50;
i:integer;
begin
  while path[Length(path)] in ['\','/']
  do path:=copy(path,0,length(path)-1);
     case Win32Platform of
       VER_PLATFORM_WIN32_NT:
         begin
           if hidden then netname:=netname+'$';
           Share.shi2_netname:=PWideChar(@((Widestring(netname))[1]));
           share.shi2_type:=STYPE_DISKTREE;
           share.shi2_permissions:=ACCESS_ALL;
           Share.shi2_remark:='';
           share.shi2_max_uses:=DWORD(-1);
           share.shi2_current_uses:=0;
           if length(password)>0
           then share.shi2_passwd:=PWideChar(@((Widestring(password))[1]))
           else share.shi2_passwd:=nil;
           share.shi2_path:=PWideChar(@((Widestring(path))[1]));
           NetShareAdd(nil,2,@Share,nil);
         end;
       VER_PLATFORM_WIN32_WINDOWS:
         begin
           for i:=1 to 7 do share50.shi50_netname[i]:=netname[i];
           share50.shi50_type:=STYPE_DISKTREE;
           if hidden then share50.shi50_flags:=SHI50F_SYSTEM else share50.shi50_flags:=SHI50F_FULL;
           share50.shi50_remark:='';
           share50.shi50_rw_password:='';
           share50.shi50_ro_password:='';
           if length(password)>0 then for i:=1 to 7 do share50.shi50_rw_password[i]:=password[i];
           share50.shi50_path:=PChar(@((UpperCase(path))[1]));
           NetShareAdd(nil,50,@share50,nil);
         end;
       else raise Exception.Create('Das Betriebssystem wurde nicht erkannt. Freigabe nicht möglich.');
     end;
end;

procedure UnshareFldr(netname:String;hidden:Boolean);
begin
  if (hidden) and (Win32Platform = VER_PLATFORM_WIN32_NT) then netname:=netname+'$';
  NetShareDel(nil,PWideChar(@((WideString(netname))[1])),0);
end;

end.
Ich hatte leider kurzfristig noch nicht die Möglichkeit unter Win9x/ME zu testen aber XP funktioniert wunderbar.

Gruß

Rai
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#18

Re: ordnerfreigabe mit passwort

  Alt 3. Jul 2004, 09:14
Zitat von rai:
Ich hatte leider kurzfristig noch nicht die Möglichkeit unter Win9x/ME zu testen aber XP funktioniert wunderbar.
Unter Win9x funktioniert es nicht.

Vielleicht helfen Dir die Prototypen weiter:
Delphi-Quellcode:
function NetShareAdd9x(pszServer: PAnsiChar; sLevel: Smallint; const pbBuffer;
  cbBuffer: Word): NET_API_STATUS; stdcall;
  external 'svrapi.dllname 'NetShareAdd';

function NetShareAddNt(servername: LPWSTR; level: DWORD; const buf;
  parm_err: LPDWORD): NET_API_STATUS; stdcall;
  external 'netapi32.dllname 'NetShareAdd';
Zudem steht in den Strukturen ziemlicher Schrott, die 9x-Version sollte etwa so aussehen:
Delphi-Quellcode:
       VER_PLATFORM_WIN32_WINDOWS:
         begin
           ZeroMemory(@share50, SizeOf(share50));
           StrLCopy(share50.shi50_netname, PChar(netname),
             SizeOf(share50.shi50_netname));
           share50.shi50_type := STYPE_DISKTREE;
           if hidden then
             share50.shi50_flags := SHI50F_SYSTEM
           else
             share50.shi50_flags := SHI50F_FULL;
           StrLCopy(share50.shi50_rw_password, PChar(password),
             SizeOf(share50.shi50_rw_password));
           StrUpper(share50.shi50_rw_password);
           StrCopy(share50.shi50_ro_password, share50.shi50_rw_password);
           // *seufz*, wie wär's mit ne Variable?
           share50.shi50_path := PChar(@((UpperCase(path))[1]));
           NetShareAdd9x(nil, 50, share50, SizeOf(share50));
         end;
Und ein Rückgabewert hätte Deiner Funktion auch nicht schaden können

ps: komisch dass damals in Spotlight niemand meinen kompletten Wrapper fürs Archiv vorgeschlagen hat... nu isses längst nicht mehr zu finden.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19

Re: ordnerfreigabe mit passwort

  Alt 3. Jul 2004, 10:59
Zitat von NicoDE:
ps: komisch dass damals in Spotlight niemand meinen kompletten Wrapper fürs Archiv vorgeschlagen hat... nu isses längst nicht mehr zu finden.
Aber du hast ihn doch noch hoffentlich?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von vlees91
vlees91

Registriert seit: 19. Apr 2004
843 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: ordnerfreigabe mit passwort

  Alt 3. Jul 2004, 12:43
man kann den oprdner einwandfrei freigeben und dann die freigabe wieder aufheben, 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?
vlees91
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 23:19 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