即时书面方式一些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;
}
}