Autor Beitrag
rstaeker
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 94

WIN 2000
D6 Prof
BeitragVerfasst: Do 02.12.04 20:44 
Hallo an die Experten,

habe ich irgendeine Chance an die Administrativen Freigaben (also die mit Dollar-Zeichen am Ende) heranzukommen. Ich meine solche Freigaben wie C$, D$, E$, etc unter WIN 2000 und XP.
Ich muss also irgendwie herausbekommen, welche AdminShares auf einem Rechner der Domäne vorhanden sind. Und das möglichst nicht durch ausprobieren.

Damit niemand denkt, ich wäre ein Hacker oder so jemand, eine Aufgabenerklärung:
Zurzeit arbeite ich im Auftrag meines Ausbilders an einem Programm, daß in der Lage ist, alle Laufwerke auf allen Servern einer Domäne auf verfügbaren Speicherplatz zu überwachen. Es kam leider schon häufiger zu Speichermangel und damit zu Programmabstürzen.
Bisher wurde ein DOS-Programm dazu eingesetzt. Der Programmierer ist nicht mehr in der Firma, deher das Problem.

//Edit: Sollte das Forum falsch sein, bitte in die entsprechende Sparte verschieben, aber ich denke mal die einzige Chance zur Lösung ist die Win-API.
herzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 168

WINXP pro, SUSE Linux 9.0
D7 Pers.
BeitragVerfasst: Fr 03.12.04 11:28 
Das geht so! :)

Als erstes brauchst du Win32API.zip von delphi-jedi.org/APILIBRARY:462727;

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit2, StdCtrls, ComCtrls, JwaLM, JwaLMShare;

type
  TfrmMain = class(TForm)
    Button1: TButton;
    lvShares: TListView;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  TShareInfo502Array = Array of _SHARE_INFO_502;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}


procedure ListSharedFolders(const sServerName: PWideChar);
var
  aShareBuffer: PSHARE_INFO_502;
  aWorkBuffer: TShareInfo502Array;
  dwEntriesRead: Cardinal;
  i: integer;
  lviNewItem: TListItem;
begin
  // ListView leeren, damit da nichts mehr drin steht
  frmMain.lvShares.Items.Clear;

  // Die Freigaben über die API laden
  NetShareEnum(sServerName, 502, PByte(aShareBuffer), MAX_PREFERRED_LENGTH,
    @dwEntriesRead, @dwEntriesRead, nil);
  // Jetzt den Buffer in ein Array laden, damit es einfer zu verwenden ist
  aWorkBuffer := TShareInfo502Array(aShareBuffer);
  // Freigaben zur ListView adden
  for i:=0 to dwEntriesRead - 1 do begin
    lviNewItem := frmMain.lvShares.Items.Add;
    // Freigabenname
    lviNewItem.Caption := aWorkBuffer[i].shi502_netname;
    // Pfad zur Freigabe auf den lokalen Datenträgern
    lviNewItem.SubItems.Add(aWorkBuffer[i].shi502_path);
    // Kommentare zur Freigabe
    lviNewItem.SubItems.Add(aWorkBuffer[i].shi502_remark);
  end;
end;
procedure TfrmMain.Button1Click(Sender: TObject);
begin
  ListSharedFolders(Computername);
end;

end.


Code teilweise von www.delphipraxis.net/post240273.html

Viel Spass

mfg
herzi