共享的信息
program con1;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils;
const
NERR_Success = 0; // Success
type
NET_API_STATUS = DWORD;
PShare_Info_0 = ^TShare_Info_0;
TShare_Info_0 = record
shi0_netname: PWideChar;
end;
PShare_Info_0_Arr = ^TShare_Info_0_Arr;
TShare_Info_0_Arr = array[0..MaxInt div SizeOf(TShare_Info_0) - 1] of TShare_Info_0;
PShare_Info_1 = ^TShare_Info_1;
TShare_Info_1 = record
shi1_netname: PWideChar;
shi1_type: DWORD;
shi1_remark: PWideChar;
end;
PShare_Info_1_Arr = ^TShare_Info_1_Arr;
TShare_Info_1_Arr = array[0..MaxInt div SizeOf(TShare_Info_1) - 1] of TShare_Info_1;
PShare_Info_2 = ^TShare_Info_2;
TShare_Info_2 = record
shi2_netname: PWideChar;
shi2_type: DWORD;
shi2_remark: PWideChar;
shi2_permissions: DWORD;
shi2_max_uses: DWORD;
shi2_current_uses: DWORD;
shi2_path: PWideChar;
shi2_passwd: PWideChar;
end;
PShare_Info_2_Arr = ^TShare_Info_2_Arr;
TShare_Info_2_Arr = array[0..MaxInt div SizeOf(TShare_Info_2) - 1] of TShare_Info_2;
PShare_Info_502 = ^TShare_Info_502;
TShare_Info_502 = record
shi502_netname: PWideChar;
shi502_type: DWORD;
shi502_remark: PWideChar;
shi502_permissions: DWORD;
shi502_max_uses: DWORD;
shi502_current_uses: DWORD;
shi502_path: PWideChar;
shi502_passwd: PWideChar;
shi502_reserved: DWORD;
shi502_security_descriptor: PSECURITY_DESCRIPTOR;
end;
PShare_Info_1004 = ^TShare_Info_1004;
TShare_Info_1004 = record
shi1004_remark: PWideChar;
end;
PShare_Info_1006 = ^TShare_Info_1006;
TShare_Info_1006 = record
shi1006_max_uses: DWORD;
end;
PShare_Info_1501 = ^TShare_Info_1501;
TShare_Info_1501 = record
shi1501_reserved: DWORD;
shi1501_security_descriptor: PSECURITY_DESCRIPTOR;
end;
function NetShareEnum(servername: PWideChar; level: DWORD; var buf: Pointer; prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD; var resume_handle: DWORD): NET_API_STATUS; stdcall; external 'netapi32.dll';
function NetShareGetInfo(servername: PWideChar; netname: PWideChar; level: DWORD; var buf: Pointer): NET_API_STATUS; stdcall; external 'netapi32.dll';
function NetApiBufferFree(P: Pointer): NET_API_STATUS; stdcall;external 'netapi32.dll';
var
Server: PWideChar;
Buffer, Loop: PShare_Info_0;
Buf502: PShare_Info_502;
NetResult: DWORD;
entriesread: DWORD;
totalentries: DWORD;
resume_handle: DWORD;
I: Integer;
begin
if (ParamCount = 0) then begin
Server := nil;
end
else begin
Server := PWideChar(WideString(ParamStr(1)));
end;
entriesread := 0;
totalentries := 0;
resume_handle := 0;
NetResult := NetShareEnum(Server, 0, Pointer(Buffer), DWORD(-1), entriesread, totalentries, resume_handle);
if (NetResult = NERR_Success) then begin
Loop := Buffer;
WriteLn('Entries read: ', entriesread);
for I := 1 to entriesread do begin
WriteLn('Name: ', string(Loop.shi0_netname));
try
NetResult := NetShareGetInfo(Server, Loop.shi0_netname, 502, Pointer(Buf502));
if (NetResult = NERR_Success) then begin
WriteLn('* Net name: ', string(Buf502.shi502_netname));
WriteLn('* Type: ', Buf502.shi502_type);
WriteLn('* Remark: ', string(Buf502.shi502_remark));
WriteLn('* Permissions: ', Buf502.shi502_permissions);
WriteLn('* Max uses: ', Buf502.shi502_max_uses);
WriteLn('* Current uses: ', Buf502.shi502_current_uses);
WriteLn('* Path: ', string(Buf502.shi502_path));
WriteLn('* Password: ', string(Buf502.shi502_passwd));
WriteLn('* Reserved: ', Buf502.shi502_reserved);
end
else begin
WriteLn('* Error: ', SysErrorMessage(NetResult));
end;
NetApiBufferFree(Buf502);
except on E: Exception do WriteLn('* Error: ', E.Message);
end;
WriteLn;
Inc(Loop);
end;
NetApiBufferFree(Buffer);
end;
end.