Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Freigegebene Festplatten eines PCs ermitteln (https://www.delphipraxis.net/4623-freigegebene-festplatten-eines-pcs-ermitteln.html)

Salomon 9. Mai 2003 23:40

Hallo Christian Seehase,
das sieht ja sehr gut aus. Ich dachte irgendwie die 9x Variante könnte auch auf NT Rechner zugreifen, naja falsch gedacht.
Ich probier das ganze gegen Mittag aus, jetzt hau ich mich erstmal aufs Ohr. Schonmal vielen Dank, ich meld mich dann nochmal hier.

Gute Nacht
Salomon

Salomon 10. Mai 2003 10:34

Es funktioniert :D Die Funktion findet auf meinem XP Rechner sogar versteckte Freigaben die mir gar nicht bekannt waren.
Da ich ja nur die freigegebenen Festplatten brauche, habe ich noch kleine Änderungen vorgenommen. Hier ist der Code für die übrigen DPler:

Einmal die Deklaration für "Share_Info_2". Dieser ermittelt auch den Freigaben Typ in "shi2_type":

Delphi-Quellcode:
type
  PSHARE_INFO_2 =^SHARE_INFO_2;
  SHARE_INFO_2 = packed record
     shi2_netname     : PWChar;
     shi2_type        : Dword;
     shi2_remark      : PWChar;
     shi_permissions  : DWord;
     shi2_max_uses    : DWord;
     shi2_current_uses : DWord;
     shi2_path        : PWChar;
     shi2_passwd      : PWChar;
    end;

Und hier das Auflisten von freigegebenen Festplatten.
Delphi-Quellcode:
procedure TForm3.SpeedButton2Click(Sender: TObject);
var
  si2Work       : PSHARE_INFO_2;
  si2Save       : PSHARE_INFO_2;
  dwEntriesRead : DWORD;
  dwTotalEntries : DWORD;
  i             : DWORD;
begin
  if NetShareEnum(nil,2,@si2Work,MAX_PREFERRED_LENGTH,@dwEntriesRead,@dwTotalEntries,nil) <> Nerr_Success then exit;
  try
    si2Save := si2Work;
    for i := 1 to dwEntriesRead do
    begin
      if si2Save.shi2_type = STYPE_DISKTREE then
           ComboBox1.Items.Add(si2Save.shi2_netname);
      inc(si2Save);
    end;
  finally
    NetApiBufferFree(si2Work);
  end;
end;
Eine Frage hätte ich aber noch. Wie schaffe ich es, das mein Programm auch unter 9x funktioniert :?: Hier sind die benötigten Funktionen ja in der "SvrApi.dll".

Thx Salomon

Chewie 10. Mai 2003 11:13

Zitat:

Zitat von Salomon
Eine Frage hätte ich aber noch. Wie schaffe ich es, das mein Programm auch unter 9x funktioniert :?: Hier sind die benötigten Funktionen ja in der "SvrApi.dll".

Thx Salomon

1.Möglichkeit: Du bietest zwei Möglichkeiten deines Programms an, eines für 9x/ME und eines für NT/2K/XP.

2. Möglichkeit: Mit GetVersion oder GetVersionEx überprüfst du die Win-Version und bindest die entsprechende DLL dynamisch ein.

Salomon 10. Mai 2003 11:36

@ Chewie: Dann werde ich die zweite Version realisieren. So eine Funktion die mir die Windowsversion zurückliefert habe ich schonmal irgendwo verwendet.

@ Alle: Leider stehe ich schon vor dem nächsten Problem :( So lange mit dem Code der lokale Rechner abgefragt wird läuft alle einwandfrei. Versuche ich aber die freigegebenen Festplatten meines Zweitrechners (auch XP) abzufragen, bekomme ich den ErrorCode 5 zurück => Access Denied (kein Zugriff).
Das kann aber eigentlich nicht sein, da ich über die Netzwerkumgegbung ganz normal ohne Passwort auf die Festplatten mit Lese- und Schreibrechten zugreifen kann.

Vielleicht hat ja einer von euch eine Idee woran das leigen könnte, oder kann den obigen Code mal bei sich im Netzwerk ausprobieren. Andere Rechner fragt man durch eine kleine Änderung ab:
Delphi-Quellcode:
Var
 ...
 res           : integer;
begin
   res := NetShareEnum('\\hier die IP des anderen Rechners\',2,@si2Work,MAX_PREFERRED_LENGTH,@dwEntriesRead,@dwTotalEntries,nil);
   showmessage(inttostr(res));

...
Thx Salomon

Christian Seehase 10. Mai 2003 14:26

Mion Salomon,

das sollte auch genauso mit einer IP-Adresse, oder dem Rechnernamen funktionieren, ab Windows 2000 auch ohne \\.

Das bei Dir die Funktion auf einen Access Denied läuft kann ich mir im Moment nur damit erklären, dass Du auf den anderen Rechnern keine Admin-Rechte hast, denn die Funktion listet ja auch versteckte und administrative Freigaben (wie C$, D$ usw.) auf.

Bei den Versionen für 9x musst Du übrigens aufpassen. Diese werden auch anders verwendet als unter NT ff. Unter 9x/ME muss z.B. der Buffer selber reserviert werden, was die NT Varianten selber erledigen.

Am Besten schaust Du Dir mal die Doku dazu an. Entweder im PSDK, oder online unter msdn.microsoft.com.

Salomon 10. Mai 2003 17:58

Argh, wer lesen kann ist klar im Vorteil...
Zitat:

Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareEnum function at levels 2 and 502. No special group membership is required for level 0 or level 1 calls.
Ich habe das ganze jetzt auf Level 1 realisiert, klappt wunderbar :)

TuXX 11. Jul 2003 05:09

Re: Freigegebene Festplatten eines PCs ermitteln
 
Sicherlich werdet ihr mich jetzt für depperd halten,
aber koennte das mal einer als unit posten,
bin zu bleed das zu implementieren...


mfg

TuXX

Christian Seehase 11. Jul 2003 13:54

Re: Freigegebene Festplatten eines PCs ermitteln
 
Moin TuXX,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Da sich mit den Codes auf der ersten Seite dieses Threads das ganze nahezu per Copy&Paste implementieren liesse:

Was hast Du denn genau vor, und woran scheitert es?

TuXX 12. Jul 2003 23:07

Re: Freigegebene Festplatten eines PCs ermitteln
 
Erstmal: Vielen Dank für das herzliche Wilkommen.

Mein "Problem" hat sich schon erledigt,
Es ging wirklich mit copy 'n paste..

Vvielen Dank trozdem

TuXX

Captnemo 27. Aug 2003 10:44

Re: Freigegebene Festplatten eines PCs ermitteln
 
Hi,

tolles Thema, da ich mich auch gerade damit beschäftige. Ich habe euren Thread verfolgt, und mir dann auch die Jedi-Libary heruntergeladen.
Allerdings möchte ich nicht die Freigaben abfragen, sondern eine neue erstellen (unter XP).
Dabei habe ich dann auch gleich Probleme. Hat einer einen Bespielcode der mir hier weiterhilft?

Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 Uhr.
Seite 2 von 4     12 34      

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