检查的共享文件夹上另一台Windows的权限失败,并访问被拒绝?(Checking the perm

2019-09-18 04:06发布

即时书面方式一些C ++代码检索共享褶皱的权限在另一计算机中,通过“权限”我的意思是像该用户或用户组被允许或拒绝该文件夹。

下面就来得到一个共享文件夹中的某个远程计算机(称为strServerName其IP是strServerIP)。该问题是,当我删除了“每个人”帐户中的“共享”选项卡(名为strFileName)的NTFS安全描述符的功能文件夹中,GetNamedSecurityInfo功能会失败,错误代码为5,这意味着访问被拒绝。 如果我坚持“所有人”功能工作得很好。 我不能保证“每个人”是在一些偏远的共享文件夹中保留与否。 因此,如何让此功能工作(或其他方法可以检查权限将是确定的),而“大家”?

PSECURITY_DESCRIPTOR ADDirectorySearch::getNTFSSecDescriptor2(CString strFileName, CString strServerName, CString strServerIP)
{
    //CString strServerNameWithSlash = _T("\\\\") + strServerName;//"\\\\veotax3";
    CString strFilePathName = _T("\\\\") + strServerName + _T("\\") + strFileName;//"\\\\veotax3\\nrdc1001";
    CString strFilePathName2 = _T("\\\\") + strServerIP + _T("\\") + strFileName;//"\\\\192.168.1.7\\nrdc1001";
    _bstr_t bstrFilePathName = strFilePathName;

    BOOL bSuccess = FALSE;
    PSECURITY_DESCRIPTOR pSecDescriptorBuf = NULL;
    DWORD dwSizeNeeded = 0;

label2:;
       bSuccess = GetNamedSecurityInfoW(bstrFilePathName, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &pSecDescriptorBuf);
       //bSuccess = GetFileSecurityW(bstrFilePathName, DACL_SECURITY_INFORMATION, NULL, 0, &dwSizeNeeded);
       if (ERROR_SUCCESS != bSuccess)
       {
           if (strFilePathName != strFilePathName2)
           {
               strFilePathName = strFilePathName2;
               bstrFilePathName = strFilePathName2;
               goto label2;
           }
           else
           {
               MyMessageBox_Error(_T("getNTFSSecDescriptor2 Error."), _T("Error"));
               return NULL;
           }
       }
       else
       {
            return pSecDescriptorBuf;
       }
}
文章来源: Checking the permissions of a shared folder on another Windows failed with access denied?