GetAccessControl создает исключение UnauthorizedAccessException для доступа к каталогу SystemData - PullRequest
0 голосов
/ 23 декабря 2018

Я работал с C #, в частности с фреймворком (структурами) UWP / WPF, редактируя некоторые из подкаталогов C:\\ProgramData\\Microsoft\\Windows\\SystemData с целью редактирования и удаления изображений экрана блокировки, хранящихся в C:\\ProgramData\\Microsoft\\Windows\\SystemData\\ID\\ReadOnly.

Первоначально я только что вручную изменил разрешения для каталога ProgramData, а затем для каталога SystemData, однако всякий раз, когда система изменяет файлы в каталоге SystemData, его разрешения сбрасываются.(Я хочу, чтобы конечный продукт моей программы планировалось периодически запускать, поэтому я не смог бы делать это каждый раз вручную.) Просто позвонив: Directory.GetAccessControl("C:\\ProgramData\\Microsoft\\Windows\\SystemData"); yields System.UnauthorizedAccessException: 'Attempted to perform an unauthorized operation.'.

Значение по умолчаниюПрава доступа к каталогу не позволяют мне даже читать атрибуты каталога или получать доступ к его файлам, не изменяя его права администратора.Так как я могу сделать это вручную (чтобы отредактировать разрешения, чтобы получить полный контроль), я предполагаю, что есть какой-то способ сделать это в C #.Мой app.manifest имеет requireAdministrator в качестве requestedExecutionLevel, и в настоящее время я не использую олицетворение, а текущий WindowsIdentity отображается как LAPTOP-ID\\USERNAME.

Как я могу выполнить эти изменения, когда ядаже не могу получить контроль доступа к каталогу, который мне нужен для редактирования прав доступа?

1 Ответ

0 голосов
/ 25 декабря 2018

При вызове вышеупомянутой функции она устанавливает только первые 4 изображения, поэтому мне нужно удалить 5-е, я считаю, перед вызовом функции.

Ваше описание верно.Пожалуйста, проверьте следующий снимок экрана, изображение экрана блокировки по умолчанию было сохранено в папке LockScreen_o.Каждый раз, когда вы вызываете описанный выше метод (LockScreen.SetImageFileAsync), он создает новую папку и называет имя папки в аз-порядке.Это означает, что каждое изображение на экране блокировки имеет свою собственную папку, поэтому вам не нужно удалять 5-е изображение, созданное после экрана блокировки.И владельцем папки по умолчанию является Система , которую нельзя изменить с помощью кода UWP.

enter image description here

Я использую следующий код для настройки блокировки экрана, он работает для каждого изображения.

private async void Button_Click(object sender, RoutedEventArgs e)
{
    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
    picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
    picker.FileTypeFilter.Add(".jpg");
    picker.FileTypeFilter.Add(".jpeg");
    picker.FileTypeFilter.Add(".png");

    Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
    if (file != null)
    {
        await LockScreen.SetImageFileAsync(file);
    }
    else
    {

    }

}
...