Я пытаюсь получить действующие права пользователя на файл с помощью взаимодействия в C #.Ниже приведен код, который я использую:
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;
}
Этот код работает нормально, пока я не начну изменять структуру ACL с использованием классов FileAccessRule и FileInfo, а затем я получу ошибку Windows 1336: ERROR_INVALID_ACL.То же самое и в случае отладки процесса: я вызываю GetFileEffectiveRights один раз, приостанавливаю процесс, меняю ACL через Windows API, возобновляю и снова вызываю GetFileEffectiveRights (1-й вызов завершается успешно, а второй дает 1336.)Что не так?PS: я занимаюсь разработкой на Windows 7 с использованием VS 2008 и .NET 3.5РЕДАКТИРОВАТЬ: я получаю сообщение об ошибке только при попытке получить права на файл, для которого был добавлен не унаследованный ACE через File API Windows GUI / C #.