|
作者: fora [fora] 论坛用户 | 登录 |
res := WnetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum); count :=$ffffffff; buffersize := 8192; getmem(buf,buffersize); res := WnetEnumResource(lphEnum,count,buf,buffersize); 但是这样获取的好象只有自己设定的共享文件夹,对默认共享如(IPC$,C$,ADMIN$)列举不出来,是不是我的参数设定有问题,请指教。 |
地主 发表时间: 05/14 17:24 |
回复: ricky [ricky] 版主 | 登录 |
需要两个函数一起用 WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,NULL,&En); WNetEnumResource(En,&Count,nbuf,&len); |
B1层 发表时间: 05/14 18:29 |
回复: fora [fora] 论坛用户 | 登录 |
和尚,我是一起用的呀,先Netopen再Netenum,但只列出我自己设定共享的目录了,其它默认的没有。 WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,NULL,&En); 倒数第二个参数怎么是空呢。我要把目的主机的地址指定呀。 @NetResource中包含了NetResource.lpRemoteName:='\\xxx.xxx.xxx.xxx'; |
B2层 发表时间: 05/14 19:04 |
回复: ricky [ricky] 版主 | 登录 |
第一个函数要用两次,这样你就可以把整个的网上邻居全部列出来了,我的马就是这么做的 |
B3层 发表时间: 05/15 08:40 |
回复: fora [fora] 论坛用户 | 登录 |
我不需要把整个网上邻居里的机器全列出来。用多次是先列出工作组,再列出机器名,然后是共享目录吧 我只想列出指定机器里的共享目录。 比如对“192.168.0.12”,我想列出它的c$,D$,E$,admin$,ipc$,以及“新建文件夹”之类的。 |
B4层 发表时间: 05/15 09:07 |
回复: ricky [ricky] 版主 | 登录 |
没有用过,所以没有发言权 |
B5层 发表时间: 05/16 09:00 |
回复: softlib [softlib] 论坛用户 | 登录 |
NetShareEnum() |
B6层 发表时间: 05/16 17:27 |
回复: fora [fora] 论坛用户 | 登录 |
我在MSDN上也查到了。 The WNetEnumResource function does not enumerate users connected to a share; use the NetConnectionEnum function. Also, to enumerate hidden shares, use the NetShareEnum function. 但我使用delphi写了一个NetShareEnum的程序,但它什么共享也列举不出来,没有找到原因。空连接我也建立了。 下面是一段尝试的程序,不知什么地方有问题呀。各位老大帮忙看一下了。 procedure TForm1.Button1Click(Sender: TObject); var str : string; NetApiStatus : integer; servername : pwidechar; shareinfo : PShareinfo0; lpBuffer,h: pointer; entriesread, totalentries, resume_handle : integer; counter : integer; // str : string; aNetRes:TNETRESOURCE; Error: DWord; TimeOut:TimeVal; begin fillchar(aNetRes,sizeof(TNetResource),0); anetRes.dwScope := RESOURCE_CONNECTED; anetRes.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER; aNetRes.dwType := RESOURCETYPE_ANY; aNetRes.lpLocalName := ''; aNetRes.lpProvider := ''; str:='\\10.65.60.78\ipc$'; aNetRes.lpRemoteName :=pchar(str); error := WNetAddConnection2(anetres,'','',0); TimeOut.tv_sec:=2; TimeOut.tv_usec:=0; if error = NO_ERROR then begin str := '\\10.65.60.78'; getmem(servername,sizeof(widechar)*(length(str)+1)); stringtowidechar(str,servername,sizeof(char)*(length(str)+1)); repeat NetApiStatus := NetShareEnum(servername, 0, lpBuffer, -1, entriesread, totalentries, resume_handle); shareInfo := pShareinfo0(lpbuffer); for Counter := 0 to EntriesRead - 1 do begin showmessage(widechartostring(shareInfo^.shi0_netname)); Inc(shareInfo); end; netapibufferfree(lpbuffer); until (NetApiStatus <> ERROR_MORE_DATA); showmessage(inttostr(netapistatus)); end; end; 在另外一个单元文件中定义了: function NetShareEnum(servername: LPWSTR; level: integer; var butptr: Pointer;prefmaxlen: integer; var entriesread: integer; var totalentries: integer; resume_handle: integer):NET_API_STATUS; stdcall; implementation function NetShareEnum; external netapi32lib name 'NetShareEnum'; 先谢谢大家伙儿了 |
B7层 发表时间: 05/16 20:52 |
回复: softlib [softlib] 论坛用户 | 登录 |
给你摘段代码吧。 VOID WINAPI EnumShare(LPWSTR lpszServer) { PSHARE_INFO_1 BufPtr,p; NET_API_STATUS res; DWORD er=0,tr=0,resume=0, i; do { res = NetShareEnum ( lpszServer, 1, (LPBYTE *) &BufPtr, -1, &er, &tr, &resume); if ( res == ERROR_SUCCESS || res == ERROR_MORE_DATA ) { p = BufPtr; for ( i = 1; i <= er; i++ ) { switch ( p->shi1_type ) { case STYPE_DISKTREE: Form1->Memo1->Lines->Add( String(p->shi1_netname) + ": Disk driver"); break; case STYPE_PRINTQ: Form1->Memo1->Lines->Add( String(p->shi1_netname) + ": Printe queue"); break; case STYPE_DEVICE: Form1->Memo1->Lines->Add( String(p->shi1_netname) + ": Communication device"); break; case STYPE_IPC: Form1->Memo1->Lines->Add( String(p->shi1_netname) + ": Interprocess communication (IPC)"); break; case STYPE_SPECIAL: Form1->Memo1->Lines->Add( String(p->shi1_netname) + ": Special share"); break; default: Form1->Memo1->Lines->Add( String(p->shi1_netname) + ": Unknown share"); break; } p++; } NetApiBufferFree(BufPtr); } else { ShowError(res); } }while (res==ERROR_MORE_DATA); return; } |
B8层 发表时间: 05/17 00:08 |
回复: fora [fora] 论坛用户 | 登录 |
我在xfocus上也看到这一段代码了,c语言的我这儿也有一个,可以实现,但不知道为什么在delphi下不可以。 |
B9层 发表时间: 05/17 08:59 |
回复: fora [fora] 论坛用户 | 登录 |
谢谢,我已经找到错了,很低级 感谢softlib、和尚,:) |
B10层 发表时间: 05/17 09:47 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号