Как определить права процесса если оно было запущено сторонним приложением?

Рейтинг: 3Ответов: 0Опубликовано: 30.06.2023

Написал вот такой код для того чтоб можно было узнать с какими правами запущено приложение:

private static void GetRights(string argument1, string _)
{
    Process[] processes = Process.GetProcesses();
    bool finded = false;
    foreach (Process process in processes)
    {
        if (process.ProcessName == argument1 || process.Id.ToString() == argument1)
        {
            try
            {
                WindowsIdentity identity = new WindowsIdentity(process.StartInfo.UserName);
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                string userRights = principal.IsInRole(WindowsBuiltInRole.AccountOperator) ? "AccountOperator" :
                                    principal.IsInRole(WindowsBuiltInRole.Administrator) ? "Administrator" :
                                    principal.IsInRole(WindowsBuiltInRole.BackupOperator) ? "BackupOperator" :
                                    principal.IsInRole(WindowsBuiltInRole.Guest) ? "Guest" :
                                    principal.IsInRole(WindowsBuiltInRole.PowerUser) ? "PowerUser" :
                                    principal.IsInRole(WindowsBuiltInRole.PrintOperator) ? "PrintOperator" :
                                    principal.IsInRole(WindowsBuiltInRole.Replicator) ? "Replicator" :
                                    principal.IsInRole(WindowsBuiltInRole.SystemOperator) ? "SystemOperator" :
                                    principal.IsInRole(WindowsBuiltInRole.User) ? "User" :
                                    "Unknown";
                Console.WriteLine($"{process.Id}:::{process.ProcessName} > {userRights}");
                finded = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Failed to access path for process: {process.Id}:::{process.ProcessName} >> {ex.Message}");
                finded = true;
            }
        }
    }
    if (!finded)
    {
        Console.WriteLine("process not found");
    }
}

В теории этой функции должен был передаваться (id или имя процесса, None) а он должен был выводить права процесса, однако как оказалось позже WindowsBuiltInRole может выдать права процесса только если мое приложение и запустило этот процесс, в последствии чего получаю такую ошибку:

>$>: getrights System
Failed to access path for process: 4:::System >> Process was not started by this object, so requested information cannot be determined.
>$>:

а других способов узнать права приложения я не нашёл, как это можно было бы реализовать? Была дурная идея с заморозкой процессов, если выйдет то он обычный, если не выйдет то админ, однако сомнительная идея ибо может навредить другим процессам + если у моего приложения права администратора то ничего не выйдет

Ответы

Ответов пока нет.