Конференция "WinAPI" » Пара вопросов по учетным записям и процессам [D7, WinXP]
 
  • Blasphemie © (21.12.08 18:47) [0]
    Доброе время суток!
    Есть несколько вопросов по учетным записям и процессам в ХР/2003:
    При нескольких локально залогиненных в системе юзерах (Fast User switching) - как узнать ID активного юзера? Т.е., того, чей десктоп сейчас активен.
    Как узнать "хозяина процесса", т.е. от имени какого юзера он запущен?
    И еще вопрос: как отловить событие "fast user switchung" не в момент Lock Windows, а в момент, когда юзер становится активным, т.е. переключается на свой десктоп?
  • Psycho © (25.12.08 23:34) [1]
    неужели никто не знает?.. мне это тоже интересно
  • Ляпа (30.12.08 15:43) [2]
  • kami © (30.12.08 17:40) [3]
    > [2] Ляпа   (30.12.08 15:43)

    Не совсем то.
    afair, GetActiveConsoleSessionID возвратит ID первого локально залогинившегося пользователя. Что при FUS будет не совсем правильно.

    function GetProcessUserInformation(ProcessId: DWORD;
     var UserName, Domain: string; var SIDName: SID_NAME_USE): Boolean;
    //(C) вроде И.Ш. (не помню точно, но не мое)
    var
     TokenSid: PSID;
    begin
     Result := false;
     if not GetProcessTokenSid(ProcessId, TokenSid) then
       Exit;
     try
       Result := GetSidInfo(nil, TokenSid, UserName, Domain, SIDName);
     finally
       ReallocMem(TokenSid, 0);
     end;
    end;



    Чуть посмотрев по MSDN:
    для обычного приложения - использовать WTSRegisterSessionNotification.
    для сервиса - HandlerEx.
    И вроде будет счастье.
 
Конференция "WinAPI" » Пара вопросов по учетным записям и процессам [D7, WinXP]
Есть новые Нет новых   [134435   +36][b:0][p:0.001]