Как определить права процесса если оно было запущено сторонним приложением?
Написал вот такой код для того чтоб можно было узнать с какими правами запущено приложение:
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.
>$>:
а других способов узнать права приложения я не нашёл, как это можно было бы реализовать? Была дурная идея с заморозкой процессов, если выйдет то он обычный, если не выйдет то админ, однако сомнительная идея ибо может навредить другим процессам + если у моего приложения права администратора то ничего не выйдет
Источник: Stack Overflow на русском