方法:如何获取远程PC所有共享资源

http://www.cnblogs.com/xuesongshu/

  在一网热心网友的帮助下我解决的NetShareEnum返回NO_ACCESSS_DENIED(5)的问题。可惜网上相关资料实在找不着。我决定把我的方法分享给更多的网友们,希望能帮助到更多的人。

  SHARE_INFO_2、SHARE_INFO_502、SHARE_INFO_503适合于遍历1个共享资源里所有目录。如果用它们获取远程PC有多少共享资源,它就返回5。SHARE_INFO_0、SHARE_INFO_1才适合获取远程PC有多少共享资源。看到这一点,想必网友们已经想到方法了。我的代码如下:

void EnumShareResources()
{
	//PSHARE_INFO_1 pShareTmp=NULL,pShareBuffer=NULL;
	PSHARE_INFO_0 pShareTmp=NULL,pShareBuffer=NULL;
	NET_API_STATUS netApiStat=ERROR_SUCCESS;
	DWORD dwEr=0,dwTr=0,dwResume=0,i=0,dwEnumOpenStat=0,dwEnumEnumStat=0;
	char* pcHost=(char*)calloc(64,sizeof(char));
	LPWSTR szWideIp=(LPWSTR)calloc(32,sizeof(WCHAR));
	BOOL bFind=FALSE;
	sprintf(pcHost,"%d.%d.%d.%d",192,168,10,183);
	//GetHostNameByIp(pcHost);
	//i=MultiByteToWideChar(CP_ACP,0,pcIp,-1,NULL,0);
	MultiByteToWideChar(CP_ACP,0,pcHost,-1,szWideIp,64);
	memcpy(pcHost,szWideIp,64);
	do 
	{
		//netApiStat=NetShareEnum(pcHost,1,(LPBYTE*)&pShareBuffer,-1,&dwEr,&dwTr,&dwResume);
		netApiStat=NetShareEnum(pcHost,0,(LPBYTE*)&pShareBuffer,-1,&dwEr,&dwTr,&dwResume);
		if (netApiStat==ERROR_MORE_DATA||netApiStat==ERROR_SUCCESS)
		{
			pShareTmp=pShareBuffer;
			for (i=0;i<dwEr;i++)
			{
				//wprintf(L"%-20s%-8d%-20s",pShareTmp->shi1_netname,pShareTmp->shi1_type,pShareTmp->shi1_remark);
				wprintf(L"%20s",pShareTmp->shi0_netname);
				printf("\r\n");
				pShareTmp++;
			}
			NetApiBufferFree(pShareTmp);
		}

	} while (netApiStat==ERROR_MORE_DATA);
}

  被注释部分使用的是SHARE_INFO_1。

转载于:https://my.oschina.net/zhtqs/blog/1509805

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值