2012-07-12 95 views
1

使用下面的代碼我拒絕了用戶的寫入權限,即使當我檢查安全選項卡時,只有寫入權限被拒絕,但我無法訪問文件夾進行讀取。當我拒絕寫入權限時使用NTFS拒絕讀取權限

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); 

回答

1

你不顯示objAce1

您需要訂購拒絕ACE條目給ACE條目之前

嘗試交換ACL中條目的順序。

因此,DACL的ACE列表應該被適當地排序。標準(規範)排序是首先明確拒絕,然後明確允許,普通(組)拒絕和組允許。如果不使用規範有序,未預料到的允許或拒絕可能會出現

Understanding Windows File And Registry Permissions

+0

我沒有使用objAce1,我評論說塊,因此拒絕寫之前,我需要做的,讓閱讀?? – 2012-07-16 08:50:51

+0

在拒絕之前,您需要做**沒有**(至少不在同一個ACL中)。繼承的條目不計算IIRC - 請參閱鏈接的文章) – sehe 2012-07-16 09:36:13