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 に答える