Re: Как получить SID текущего сеанса?
От: kov_serg Россия  
Дата: 29.12.19 20:04
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Во всех найденных примерах, начиная с родного от MS, предлагается применять GetTokenInformation к маркеру, полученному от OpenProcessToken. Таким образом можно получить пользователя, от имени которого создан процесс, но не пользователя, которому принадлежит текущий сеанс. То есть, в простейшем случае, для процессов, созданных "as administrator", это не работает.


ЕМ>Попробовал применить GetUserObjectInformation к результатам GetProcessWindowStation и OpenInputDesktop — в обоих случаях возвращается какой-то бред, отдаленно похожий на well-known SID:


ЕМ>S-1-5-5-0-607555


ЕМ>Какие еще есть способы? Желательно, чтоб работало под XP, но можно и начиная с Win7.


А если так попробовать?
using System;
using System.Security.Principal;
using System.Management;

class App {
    static string GetSID() {
        var mos = new ManagementObjectSearcher(
            new ManagementScope("\\\\localhost\\root\\cimv2"),
            new ObjectQuery("SELECT username FROM Win32_ComputerSystem")
        );
        foreach (var mo in mos.Get()) {
            var username = mo["username"].ToString();
            var nta = new NTAccount(username);
            var sid = (SecurityIdentifier)nta.Translate(typeof(SecurityIdentifier));
            return sid.ToString();
        }
        throw new Exception("panic");
    }
    [STAThread]
    static void Main(string[] args) {
        Console.WriteLine(GetSID());
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.