GetEffectiveRightsFromAcl выдает ошибку ACL - PullRequest
0 голосов
/ 18 июня 2010

Я пытаюсь получить действующие права пользователя на файл с помощью взаимодействия в 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 #.

1 Ответ

2 голосов
/ 19 июня 2010

Проблема в другой части вашей проблемы, которая изменяет ACL через Windows API.

Порядок ACE в DACL очень важен. Например, в http://support.microsoft.com/kb/269175/en вы найдете полное описание правильного порядка ACE и пример кода.

Если у вас останется та же проблема, просто опубликуйте пример кода модификации ACL в вашем вопросе.

...