공유폴더 찾아주기 | |||
| |||
I need to know how to list shared folders on a computer that I am connected over LAN to, given its IP or machine name. Thanks ahead. ======================================================================================================== Accepted Answer from Workshop_Alex Date: 10/31/2003 03:21AM PST ======================================================================================================== program GetNetShares; {$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; &.bsp; 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. One single DLL executing what you want. ParamStr(1) should contain the name of the server. Use GetNetShares <Server> to execute, replacing <Server> with the server name. ======================================================================================================== Comment from duke_n Date: 10/31/2003 08:28AM PST ======================================================================================================== This is great. Thanks a lot. Tags: 공유폴더 윈도우즈 | |||
| |||
| |||
Login for comment |