Hi,
ich versuche gerade ein wenig mit der
NetShare*-Funktionen der
WinAPI herumzuspielen... Ich habe dazu ja auch schon einen längeren Dialog mit
OregonGhost geführt, der mir bei der Lösung eines kleinen Problemes behilflich war.
Mit Hilfe der genannten Funktionen lassen sich die freigebenen Ressourcen relativ einfach verwalten. Ich möchte anhand eines kleinen Beispiels zeigen, wie man die Funktion
NetShareEnum verwendet. Sie listet alle Freigaben auf.
Ich gehe davon aus, dass ihr schon eine ListView mit zwei Spalten hinzugefügt habt. Dann braucht ihr nur noch folgenden SourceCode verstehen und umsetzen.
Delphi-Quellcode:
{
Wer die JEDI-Übersetzungen der WinAPI-Header hat, braucht nur die Units JwaLM und JwaLMShare (gaaanz wichtig: beide!!!) einbinden.
Wer sie nicht hat, nimmt einfach diesen Ausschnitt daraus:
}
function NetShareEnum(servername: LMSTR; level: DWORD;
var bufptr: LPBYTE; prefmaxlen: DWORD;
entriesread, totalentries, resume_handle: LPDWORD): DWORD;
stdcall;
const MAX_PREFERRED_LENGTH = DWORD(-1);
type
_SHARE_INFO_502 =
record
shi502_netname: LMSTR;
shi502_type: DWORD;
shi502_remark: LMSTR;
shi502_permissions: DWORD;
shi502_max_uses: DWORD;
shi502_current_uses: DWORD;
shi502_path: LMSTR;
shi502_passwd: LMSTR;
shi502_reserved: DWORD;
shi502_security_descriptor: PSECURITY_DESCRIPTOR;
end;
PSHARE_INFO_502 = ^_SHARE_INFO_502;
{
Und alles was jetzt kommt muss sowieso jeder machen. Erstmal brauchen wir einen kleinen array-Typen
}
TShareInfo502Array =
Array of _SHARE_INFO_502;
{
Und als nächstes nur schnell unsere kleine Funktion zum Auflisten der Freigaben.
frmMain ist unser Hauptformular, lvShares unsere ListView.
Der Parameter sServerName gibt an, auf welchem Rechner die Freigaben gesucht werden. Wenn nil übergeben wird, werden die lokalen Freigaben verwendet.
}
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;
Das war's schon.
Weitere Informationen gibt es wie immer im [
msdn:cb3a3a4ba5="NetShareEnum"]
MSDN[/
msdn:cb3a3a4ba5].
Chris
PS: Über Anregungen und Verbesserungsvorschläge würde ich mich freuen.