Проверка каталог и файл пишет полномочия в.NET

Я предполагаю, что Вы используете GCC. Стандартное решение состояло бы в том, чтобы представить с gprof.

убедиться добавить -pg к компиляции перед профилированием:

cc -o myprog myprog.c utils.c -g -pg

я еще не попробовал его, но я услышал хорошие вещи приблизительно google-perftools . Это определенно стоит попытки.

Связанный вопрос здесь .

Несколько других модных словечек, если gprof не делает задания для Вас: Valgrind, Intel VTune, Sun DTrace.

75
задан Andy 22 June 2015 в 10:32
поделиться

4 ответа

Ответы Ричарда и Джейсона в некотором роде правильное направление. Однако вам следует вычислить действующие разрешения для удостоверения пользователя, выполняющего ваш код. Ни один из приведенных выше примеров, например, не учитывает членство в группе.

Я почти уверен, что Кейт Браун имел код для этого в его версии вики (в настоящее время не в сети ) из . Руководство для разработчиков .NET по безопасности Windows . Это также достаточно подробно обсуждается в его книге Программирование безопасности Windows .

Вычисление эффективных разрешений не для слабонервных, и ваш код, пытающийся создать файл и перехватить выброшенное исключение безопасности, вероятно, путь наименьшего сопротивления.

21
ответ дан 24 November 2019 в 11:39
поделиться

Directory.GetAccessControl (path) выполняет то, что вы просите.

public static bool HasWritePermissionOnDir(string path)
{
    var writeAllow = false;
    var writeDeny = false;
    var accessControlList = Directory.GetAccessControl(path);
    if (accessControlList == null)
        return false;
    var accessRules = accessControlList.GetAccessRules(true, true, 
                                typeof(System.Security.Principal.SecurityIdentifier));
    if (accessRules ==null)
        return false;

    foreach (FileSystemAccessRule rule in accessRules)
    {
        if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write) 
            continue;

        if (rule.AccessControlType == AccessControlType.Allow)
            writeAllow = true;
        else if (rule.AccessControlType == AccessControlType.Deny)
            writeDeny = true;
    }

    return writeAllow && !writeDeny;
}

(FileSystemRights.Write & rights) == FileSystemRights.Write использует что-то под названием «Флаги "Кстати, если вы не знаете, что это такое, вам стоит прочитать:)

46
ответ дан 24 November 2019 в 11:39
поделиться

IMO, вам нужно работать с такими каталогами как обычно, но вместо проверки разрешений перед использованием, укажите правильный способ обработки исключения UnauthorizedAccessException и отреагируйте соответствующим образом. Этот метод проще и менее подвержен ошибкам.

5
ответ дан 24 November 2019 в 11:39
поделиться

Попробуйте поработать с этим фрагментом C #, который я только что создал:

using System;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string directory = @"C:\downloads";

            DirectoryInfo di = new DirectoryInfo(directory);

            DirectorySecurity ds = di.GetAccessControl();

            foreach (AccessRule rule in ds.GetAccessRules(true, true, typeof(NTAccount)))
            {
                Console.WriteLine("Identity = {0}; Access = {1}", 
                              rule.IdentityReference.Value, rule.AccessControlType);
            }
        }
    }
}

И вот ссылка, на которую вы также можете посмотреть.

3
ответ дан 24 November 2019 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: