![]() |
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? |
Re: versteckte freigaben finden
Moin MacBones,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Das sollte, IMHO, mit ![]() ![]() |
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. |
Re: versteckte freigaben finden
weiß den keiner, wie man da nen anderen Server außer Local host eintragen kann?
|
Re: versteckte freigaben finden
Moin MacBones,
wie sieht's denn mit Deinen Berechtigungen auf den Remote-Rechnern aus? |
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
|
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? |
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 |
Re: versteckte freigaben finden
Moin MacBones,
Zitat:
(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) |
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?
|
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; |
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 ? |
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.
|
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. |
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:
Der aufruf lautet wie folgt:
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';
Delphi-Quellcode:
Das wars im Prinzip.
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; |
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:
Das dürfte auch die flexiblere Variante sein, da Du auch einen Leerstring erfolgreich als eigenen Rechner einsetzen kannst.
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; |
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 ?
|
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? |
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?
|
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 ![]() |
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? |
Re: versteckte freigaben finden
Moin MacBones,
was verstehst Du jetzt unter "wird sie nicht erkannt"? |
Re: versteckte freigaben finden
damit meine ich dass, die Funktion mit einem anderen PC immer noch nicht funktioniert, ich bekomme also keine freigaben angezeigt
|
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. |
Re: versteckte freigaben finden
:wiejetzt:
Du könntest auch einfach auf jedem rechner einen client installieren, der dir die freigaben zuschickt. |
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 19:24 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