-
Blasphemie © (21.12.08 18:47) [0]Доброе время суток!
Есть несколько вопросов по учетным записям и процессам в ХР/2003:
При нескольких локально залогиненных в системе юзерах (Fast User switching) - как узнать ID активного юзера? Т.е., того, чей десктоп сейчас активен.
Как узнать "хозяина процесса", т.е. от имени какого юзера он запущен?
И еще вопрос: как отловить событие "fast user switchung" не в момент Lock Windows, а в момент, когда юзер становится активным, т.е. переключается на свой десктоп? -
неужели никто не знает?.. мне это тоже интересно
-
Ляпа (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.
И вроде будет счастье.