Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi versteckte freigaben finden (https://www.delphipraxis.net/62082-versteckte-freigaben-finden.html)

MacBones 30. Jan 2006 19:19


versteckte freigaben finden
 
hallo,

Will ein programm schreiben, mit dem ich im Netzwerk Daten austauschen kann, mit anderen Clients, jedoch nicht einfach über die Sockets, sondern ich hätte gerne den Pfad dazu. alles kein Problem, wenn jeder Client seine geheimen Freigaben an den Server sendet und der alles verteilt. Das ist aber knaup und daher wüsste ich gerne ob es einen Befehl gibt mit dem ich die geheimen Freigaben suchen kann, sodass sich jeder Client seine Pfade selber sucht.

Geht das?

Christian Seehase 30. Jan 2006 22:21

Re: versteckte freigaben finden
 
Moin MacBones,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Das sollte, IMHO, mit Hier im Forum suchenNetShareEnum / MSDN-Library durchsuchenNetShareEnum gehen, entsprechende Berechtigungen vorausgesetzt.

MacBones 31. Jan 2006 12:45

Re: versteckte freigaben finden
 
Danke, das funktioniert, aber ich kann immer nur die Freigaben sehen, die auf meinem Rechner sind, was ist mit den andren im Netzwerk ? Geht das auch ?

Hier die Funktion:

NetShareEnum(nil, 502, Pointer(shareBuffer), DWORD(-1), dwRead, dwEntries, nil);
s2 := TShareInfo502Array(shareBuffer);
for i := 0 to dwRead - 1 do begin
ShowMessage(s2[i].shi502_netname);
end;

Das erste nil steht ja für den Servernamen, aber wenn ich da den Namen eines PC's eintrage geht es nicht mehr.
Was muss ich tun, damit sie mir alle anzeigt, also auch die von anderen PC's.

MacBones 2. Feb 2006 16:03

Re: versteckte freigaben finden
 
weiß den keiner, wie man da nen anderen Server außer Local host eintragen kann?

Christian Seehase 2. Feb 2006 17:08

Re: versteckte freigaben finden
 
Moin MacBones,

wie sieht's denn mit Deinen Berechtigungen auf den Remote-Rechnern aus?

MacBones 2. Feb 2006 17:15

Re: versteckte freigaben finden
 
eigentlich sollte ich alle rechte haben, aber wenn ich ich in meiner Funktion, das nil durch nen PCnamen ersetze tut sich nichts mehr

Christian Seehase 2. Feb 2006 17:51

Re: versteckte freigaben finden
 
Moin MacBones,

ich hab's hier gerade mal ausprobiert, wenn auch mit eine Level 2 Struktur, und konnte die versteckten Remoteshares auslesen.
Da die Level 2 Struktur die gleichen Rechte erfordert wie 502 dürfte das keinen Unterschied machen.

Welchen Rückgabewert gibt Dir denn die Funktion?

MacBones 3. Feb 2006 14:15

Re: versteckte freigaben finden
 
Das ist es ja eben, wenn ich meine Freigaben damit suche geht es wunderbar, aber wenn ich statt nil zum Beispiel \\MacBones\ schreibe bekomme ich gar nichts zurück, komplett nichts, noch nicht mal ne Fehlermeldung.

Ich verstehs echt nit

Christian Seehase 3. Feb 2006 18:37

Re: versteckte freigaben finden
 
Moin MacBones,

Zitat:

Zitat von MacBones
...noch nicht mal ne Fehlermeldung.

wie ist denn der Rückgabewert von NetShareEnum?
(Wenn Du es nicht gerade unter NT 4 probierst solltest Du als Rechnernamen, z.B., einfach mal MACBONES angeben, also ohne die Backslashes, ggf. kannst Du auch mal die IP-Adresse nehmen)

MacBones 3. Feb 2006 19:17

Re: versteckte freigaben finden
 
weiß jetzt nicht was du mit Rückgabewert meinst, hab da keine so große ahnung von, aber als Servernamen erwartet die Funktion eine LTPSTR Variable. Hab schon alles ausprobiert (IP-Adresse, '\\MacBones\', 'MacBones\', '\\MacBones' ,'MacBones'), aber es passiert gar nichts, es sei denn ich schreibe nil hin. Kann es vielleicht sein, das die Funktion nur mit nil Funktioniert, also das ich nur meine eigenen Freigaben sehen kann?

Christian Seehase 3. Feb 2006 19:42

Re: versteckte freigaben finden
 
Moin MacBones,

Rückgabewert ist das, was die Funktion zurückgibt ;-)

Probier's mal so (auszugsweise):

Delphi-Quellcode:
var
  dwResult : DWORD;

  dwResult := NetShareEnum('MACBONES',.....);
  if dwResult <> NERR_SUCCESS then begin
    ShowMessage(SysErrorMessage(dwResult));
  end;

MacBones 3. Feb 2006 21:37

Re: versteckte freigaben finden
 
Danke, habs probiert und dann schreibt er:
"Für das Unicode-Zeichen ist kein zugeordnetes Zeichen in der Mehrbytecodepage vorhanden"

Muss ich da was konvertieren ('MACBONES') oder was soll das heißen ?

MacBones 6. Feb 2006 13:33

Re: versteckte freigaben finden
 
Hab schon vieles versucht, aber ich weiß echt nicht weiter, kommt und sagt es mir, was ich da machen muss. Mich verwirrt das alles zuviel mit dem Unicode zeug.

Christian Seehase 6. Feb 2006 20:40

Re: versteckte freigaben finden
 
Moin MacBones,

da ich so Dein Problem nicht reproduzieren kann, könnte es vielleicht helfen, wenn Du einmal genau schreibst, wie Du das Aufrufst, und wie die Deklarationen aussehen.

MacBones 6. Feb 2006 21:23

Re: versteckte freigaben finden
 
Hab da halt die JEDI runtergeladen und eingebunden, hab ich hier irgendwo bei im Forum gefunden, als ich die Suche verwendet hab.
Also die auferufene Function lautet:
Delphi-Quellcode:
function NetShareEnum(servername: LPTSTR; level: DWORD; var butptr: Pointer;
  prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD;
  resume_handle: PDWORD): Integer; stdcall; external 'netapi32.dll';
Der aufruf lautet wie folgt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  shareBuffer: PSHARE_INFO_502;
  s2: TShareInfo502Array;
  dwRead, dwEntries: Cardinal;
  i: Integer;
  server: LPTSTR;
begin
listbox1.Clear;
server:= nil;

  NetShareEnum(server, 502, Pointer(shareBuffer), DWORD(-1), dwRead, dwEntries, nil);
  s2 := TShareInfo502Array(shareBuffer);
  for i := 0 to dwRead - 1 do begin
    listbox1.Items.Add(s2[i].shi502_netname);
  end;
end;
Das wars im Prinzip.

Christian Seehase 6. Feb 2006 22:04

Re: versteckte freigaben finden
 
Moin MacBones,

deklariere doch einmal die Variable Server als WideString und übergebe dass dann so @Server[1].
Das geht natürlich nur, wenn die Variable nicht leer ist. Den Sonderfall müsstest Du dann getrennt betrachten, oder mit PWideChar arbeiten.
Im letzteren Falle könntest Du das so machen:

Delphi-Quellcode:
var
  pwcServer : PWideChar;
  sServer  : string; // Soll hier nur als Beispiel für einen "normalen" string stehen
  dwLen    : DWORD;

begin
  sServer := 'MacBones';
  dwLen  := (length(sServer)+1) shl 2; // +1 für das abschliessende #00#00, mal 2 für 2 Byte je Zeichen
  GetMem(pwcServer,dwLen); // Platz reservieren
  try
    StringToWideChar(sServer,pwcServer,dwLen);
    if NetShareEnum(pwcServer,.....) <> NERR_SUCCESS then exit;
    try
    finally
      NetApiBufferFree(....);
    end;
  finally
    FreeMem(pwcServer,dwLen); // Platz wieder freigeben
  end;
Das dürfte auch die flexiblere Variante sein, da Du auch einen Leerstring erfolgreich als eigenen Rechner einsetzen kannst.

MacBones 8. Feb 2006 20:04

Re: versteckte freigaben finden
 
ok das funktioniert... aber nur wenn ich entweder meinen eigen PC reinschreibe oder gar keinen also ''. Nach wie vor zeigt der Code also nur meine eigenen freigaben an und nicht die meines 2. Rechners 'Pentium_III', oder kann Delphi mit solchen Netzwerknamen nichts anfangen ?

Christian Seehase 8. Feb 2006 20:21

Re: versteckte freigaben finden
 
Moin MacBones,

wenn Du den Rechner so nennen kannst, sollte auch die API da mitspielen, es wäre in jedem Falle kein Delphi-Problem.

Bekommst du, z.B., das Laufwerk C: als Exploreransicht angezeigt, wenn Du unter Start\Ausführen mal \\Pentium_III\C$ eingibst?

MacBones 9. Feb 2006 14:59

Re: versteckte freigaben finden
 
verdammt, nein das geht nicht, da kommt son dialog wo man sich anmelden muss. wie kann ich das mit Delphi umgehen?

Christian Seehase 9. Feb 2006 18:20

Re: versteckte freigaben finden
 
Moin MacBones,

wenn Du einen Account hast, mit dem Du auf den anderen Rechner zugreifen darfst, und der administrative Rechte auf dem anderen Rechner hat, solltest Du hier mal nach Hier im Forum suchenLogonUser suchen.

MacBones 10. Feb 2006 17:22

Re: versteckte freigaben finden
 
Also, ich hab mal nachgesehn, das lag wohl daran das C$ irgendeine andere macht freigabe bei mir ist, denn als ich die festplatte mal als "Festplatte$" freigegeben hab, konnt ich mit Start Ausführen ... ohne Probleme drauf zugreifen.
Jedoch wird sie von meinem und dem Delphi code, der mir hier gepostet wurde nicht erkannt. Woran kann das liegen?

Christian Seehase 10. Feb 2006 18:15

Re: versteckte freigaben finden
 
Moin MacBones,

was verstehst Du jetzt unter "wird sie nicht erkannt"?

MacBones 10. Feb 2006 18:48

Re: versteckte freigaben finden
 
damit meine ich dass, die Funktion mit einem anderen PC immer noch nicht funktioniert, ich bekomme also keine freigaben angezeigt

Christian Seehase 10. Feb 2006 19:21

Re: versteckte freigaben finden
 
Moin MacBones,

wie schon gesagt:
Wenn der Account mit dem Du das startest auf dem Rechner, von dem Du das auslesen willst auf diesem keine ausreichenden Rechte hat (Mitglied der Gruppe Administratoren, Hauptbenutzer, Druck- oder Sicherungsoperatoren ist), geht es auch nicht, wenn diese gegeben sind kann ich es mir im Moment nicht erklären, wenn der Rechner ansonsten vom anderen Rechner aus im Netzwerk sichtbar ist.

Van HelF 19. Feb 2006 17:56

Re: versteckte freigaben finden
 
:wiejetzt:
Du könntest auch einfach auf jedem rechner einen client installieren, der dir die freigaben zuschickt.

MacBones 20. Feb 2006 15:41

Re: versteckte freigaben finden
 
Van HelF, du Noob du verdammter :hello:
so mache ich es ja die ganze zeit, aber das is unnötig viel arbeit, wenns doch auch so geht, oder?
ne ne, bist ja voll Jan :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 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