1

使用下面的代码,我拒绝了用户的写入权限,即使我检查了安全选项卡,也只有写入权限被拒绝,但我无法访问该文件夹进行读取。

ADsSecurity objADsSec;
SecurityDescriptor objSecDes;
AccessControlList objDAcl;
AccessControlEntry objAce1;
AccessControlEntry objAce2;
Object objSIdHex;
ADsSID objSId;

objADsSec = new ADsSecurityClass();
objSecDes = (SecurityDescriptor)(objADsSec.GetSecurityDescriptor("FILE://" + vPath));
objDAcl = (AccessControlList)objSecDes.DiscretionaryAcl;

objSId = new ADsSIDClass();
objSId.SetAs((int)ADSSECURITYLib.ADS_SID_FORMAT.ADS_SID_SAM, UserName.ToString());
objSIdHex = objSId.GetAs((int)ADSSECURITYLib.ADS_SID_FORMAT.ADS_SID_SDDL);



objAce2 = new AccessControlEntryClass();
objAce2.Trustee = (objSIdHex).ToString();
objAce2.AccessMask = (int)ActiveDs.ADS_RIGHTS_ENUM.ADS_RIGHT_GENERIC_WRITE;
objAce2.AceType = (int)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_DENIED;
objAce2.AceFlags = (int)ActiveDs.ADS_ACEFLAG_ENUM.ADS_ACEFLAG_INHERIT_ACE | 1;
objDAcl.AddAce(objAce2);

objSecDes.DiscretionaryAcl = objDAcl;

// Set permissions on the NTFS file system folder.
objADsSec.SetSecurityDescriptor(objSecDes, "FILE://" + vPath);
4

1 回答 1

1

你没有显示 objAce1

您需要在授予 ACE条目之前订购拒绝 ACE 条目。

尝试交换 ACL 中的条目顺序。

因此,应该对 DACL 的 ACE 列表进行适当排序。标准(规范)排序是首先放置显式拒绝,然后显式允许,一般(组)拒绝和组允许。如果不使用规范排序,则可能会发生意外的允许或拒绝

了解 Windows 文件和注册表权限

于 2012-07-12T21:51:14.730 回答