使用NetShareEnum()函数获得机器上的共享资源。
nas = ::NetShareEnum(_ipaddress, 502, (LPBYTE *)&pSi502Out, 
MAX_PREFERRED_LENGTH, &er, &tr, &resume);
当_ipaddress是本机的时候可以正确的获得共享资源,但为其他机器的时候就会返回ERROR_ACCESS_DENIED这个错误
有哪位朋友遇到过相似的问题吗?

解决方案 »

  1.   

    //获得IP
    BYTE nField0;
    BYTE nField1;
    BYTE nField2;
    BYTE nField3;  m_ipAddress.GetAddress(nField0,nField1,nField2,nField3);
    _ipaddress.Format(_T("%d.%d.%d.%d"), nField0,nField1,nField2,nField3);
    //获得共享文件夹
    PSHARE_INFO_502 pSi502, pSi502Out;
    NET_API_STATUS nas;
    DWORD er = 0, tr = 0, resume = 0, j = 0;
    int tmpBreak = 0, i = 0, itPos = 0;
    _siNum = 0; do
    {
    nas = ::NetShareEnum(_ipaddress, 502, (LPBYTE *)&pSi502Out, 
    MAX_PREFERRED_LENGTH, &er, &tr, &resume);
    if(nas == ERROR_SUCCESS || nas == ERROR_MORE_DATA)
    {
    pSi502 = pSi502Out;
    for(j=0; j<er; j++)
    {
    if (_siNum > 100)
    {
    MessageBox(_T("空间不足"), _T("SHARE_INFO_502 list fail"), MB_OK);
    tmpBreak = 1;
    break;
    }
    tmpBreak = 0;
    _siInfo[_siNum].currentUses = pSi502->shi502_current_uses;
    _siInfo[_siNum].maxUses = pSi502->shi502_max_uses;
    _siInfo[_siNum].name = pSi502->shi502_netname;
    _siInfo[_siNum].passwd = pSi502->shi502_passwd;
    _siInfo[_siNum].path = pSi502->shi502_path;
    _siInfo[_siNum].permissions = pSi502->shi502_permissions;
    _siInfo[_siNum].re = pSi502->shi502_re;
    _siInfo[_siNum].type = pSi502->shi502_type; _siNum++;
    pSi502++;
    }
    NetApiBufferFree(pSi502Out);
    }
    else 
    {
    MessageBox(_T(" "), _T("NetShareEnum fail"), MB_OK);
    LogOn();
    }
    if (1 == tmpBreak)
    {
    break;
    }
    }
    while (nas == ERROR_MORE_DATA);
      

  2.   

    MAX_PREFERRED_LENGTH换成-1试试,我也不知道为什么,但是我就是这么干的
      

  3.   

    我换了-1也不行,如果我想使用用户名跟密码来访问的话,只用NetShareEnum这个函数可以实现吗?