首页  编辑  

共享的信息

Tags: /超级猛料/Network.网络通讯/共享和用户、域/   Date Created:

共享的信息

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.