WTSQueryUserToken->DuplicateTokenEx->CreateProcessAsUser

Discussion in 'WASM.WIN32' started by djmans, Jan 18, 2010.

  1. djmans

    djmans New Member

    Blog Posts:
    0
    В большинстве примеров указаная выше схема для запуска процессов. Я не могу понять одного момента, сто раз перечитал внимательно описание этих функций, зачем нужен вызов DuplicateTokenEx? Если WTSQueryUserToken возращает "obtains the primary access token", и CreateProcessAsUserW принимает "A handle to the primary token that represents a user. The handle must have the TOKEN_QUERY, TOKEN_DUPLICATE, and TOKEN_ASSIGN_PRIMARY access rights". Нафига нужна DuplicateTokenEx? Все работет без нее прекрасно...
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Blog Posts:
    0
    Возможно, вызов DuplicateTokenEx() необходим для точной спецификации маски доступа, поскольку WTSQueryUserToken(), как можно видеть, не позволяет её задать (в описании функции мы не заметили явного указания на то, что выдаётся хендл с полными правами, и, следовательно, формально на это нельзя полагаться). С другой стороны, для дупликации необходимо иметь в маске доступа существующего хендла TOKEN_DUPLICATE, на что тоже рассчитывать нельзя. Если в примерах используется схема "попробовать дупликацию, если не получилось – воспользовать оригинальный хендл", то всё сходится, если же нет, то данная схема лишь следствие кочующего из примера в пример кода.
     
  3. djmans

    djmans New Member

    Blog Posts:
    0
    Ну вот судя по "WTSQueryUserToken is intended for highly trusted services." и "must be running within the context of the LocalSystem account", с связи с такими запросами, предпологаю,что она юзает копию полученую от процесса логина юзера.

    Но вот это чудо меня ставит в полный тупик http://msdn.microsoft.com/en-us/library/ms802203.aspx

    "WTSQueryUserToken (WTSGetActiveConsoleSessionId(), &hImpersonationToken)" и коменты выше и ниже... Индуский косячекс?
     
  4. Sol_Ksacap

    Sol_Ksacap Миша

    Blog Posts:
    0
    Исправлено в следующем месяце :)