我正在尝试使用C#中的interop获取用户对文件的有效权限。以下是我正在使用的代码:
public static FileSystemRights GetFileEffectiveRights(string FileName, string UserName)
{
IntPtr pDacl, pZero = IntPtr.Zero;
int Mask = 0;
uint errorReturn = GetNamedSecurityInfo(FileName, SE_OBJECT_TYPE.SE_FILE_OBJECT, SECURITY_INFORMATION.Dacl
, out pZero, out pZero, out pDacl, out pZero, out pZero);
if (errorReturn != 0)
{
throw new Exception("Win error : " + errorReturn);
}
Program.TRUSTEE pTrustee = new TRUSTEE();
pTrustee.pMultipleTrustee = IntPtr.Zero;
pTrustee.MultipleTrusteeOperation = (int)Program.MULTIPLE_TRUSTEE_OPERATION.NO_MULTIPLE_TRUSTEE;
pTrustee.ptstrName = UserName;
pTrustee.TrusteeForm = (int)Program.TRUSTEE_FORM.TRUSTEE_IS_NAME;
pTrustee.TrusteeType = (int)Program.TRUSTEE_TYPE.TRUSTEE_IS_USER;
errorReturn = GetEffectiveRightsFromAcl(pDacl, ref pTrustee, ref Mask);
if (errorReturn != 0)
{
throw new Exception("Win error : " + errorReturn);
}
return (FileSystemRights)Mask;
}
此代码正常工作,直到我开始使用类FileAccessRule和FileInfo修改ACL结构,然后我开始得到Windows错误1336:ERROR_INVALID_ACL。如果我调试进程,情况也是如此:我调用GetFileEffectiveRights一次,暂停进程,通过Windows API更改ACL,然后重新启动并再次调用GetFileEffectiveRights(第一次调用成功但第二次调用1336.)
出了什么问题?
PS:我正在使用VS 2008和.NET 3.5在Windows 7上进行开发
编辑:当我尝试获取通过Windows GUI / C#的File API添加了非继承ACE的文件的权限时,我只收到错误。
答案 0 :(得分:2)
问题出在问题的另一部分,即通过Windows API更改ACL。
DACL中ACE的顺序非常重要。例如,在http://support.microsoft.com/kb/269175/en中,您将找到有关正确ACE顺序和代码示例的完整说明。
如果您仍然遇到同样的问题,请在您的问题中发布修改ACL的代码示例。