DuplicateTokenEx

Тема в разделе "WASM.WIN32", создана пользователем solvitz, 15 сен 2011.

  1. solvitz

    solvitz Member

    Публикаций:
    0
    Регистрация:
    28 авг 2010
    Сообщения:
    86
    Прототип АПИшки:
    Код (Text):
    1. BOOL WINAPI DuplicateTokenEx(
    2.   __in      HANDLE hExistingToken,
    3.   __in      DWORD dwDesiredAccess,
    4.   __in_opt  LPSECURITY_ATTRIBUTES lpTokenAttributes,
    5.   __in      SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
    6.   __in      TOKEN_TYPE TokenType,
    7.   __out     PHANDLE phNewToken
    8. );
    Меня интересует, что надо подставлять в 4 и 5 параметр. В 4 параметре мне надо значение - SecurityDelegation. А в 5 параметре TokenPrimary. То есть не могу догнать синтаксически для ассемблера какие значения мне надо закидывать на стек. Облазил все заголовочные файлы и от студии и от масма ничего не нашел.

    И еще вопрос в догонку почему не работает такая последовательность?
    Код (Text):
    1. - OpenProcess
    2. - OpenProcessToken
    3. - CreateEnvironmentBlock
    4. - CreateProcessAsUser
    Ошибка происходит на CreateEnvironmentBlock. Он возвращает FALSE. Прочитал на RSDN, что должно быть вот так:
    Код (Text):
    1. - OpenProcess
    2. - OpenProcessToken
    3. - DuplicateTokenEx
    4. - CreateEnvironmentBlock
    5. - CreateProcessAsUser
    Объясните почемунадо делать так.
     
  2. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    ну так SecurityDelegation = 3 , а TokenPrimary= 1, в чем проблема?
     
  3. solvitz

    solvitz Member

    Публикаций:
    0
    Регистрация:
    28 авг 2010
    Сообщения:
    86
    Спасибо! Нигде не мог этого найти. Сейчас буду экспериментировать.
     
  4. solvitz

    solvitz Member

    Публикаций:
    0
    Регистрация:
    28 авг 2010
    Сообщения:
    86
    Не могу разобраться с CreateEnvironmentBlock. Все функции до нее отрабатывают нормально. Вот код до нее (FASM):
    Код (Text):
    1. ...
    2. uProcess              PROCESSENTRY32
    3.   hOldToken                       dd ?
    4.   hNewToken               dd ?
    5.   lpEnvironment                               dd ?
    6.   hProc                               dd ?
    7. ...
    8. invoke OpenProcess,PROCESS_QUERY_INFORMATION, TRUE, [uProcess.th32ProcessID]
    9.     mov [hProc],eax
    10. invoke OpenProcessToken, [hProc],0x8 + 0x2 + 0x1, hOldToken
    11. invoke DuplicateTokenEx,[hOldToken],20,NULL,3,1, hNewToken
    12. invoke CreateEnvironmentBlock,lpEnvironment,[hNewToken],TRUE
    13. ...
    А вот на ней всегда выдает FALSE. GetLastError показывает ошибку 203 - ERROR_ENVVAR_NOT_FOUND (The system could not find the environment option that was entered.).
    Не пойму, что я делаю не так. Весь код исполняется в сервисе под LocalSystem.
     
  5. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    OpenProcessToken: "0x8 + 0x2 + 0x1", может or?

    DuplicateTokenEx: 20, может MAXIMUM_ALLOWED(0x02000000)?
     
  6. solvitz

    solvitz Member

    Публикаций:
    0
    Регистрация:
    28 авг 2010
    Сообщения:
    86
    Спасибо за подсказку! Все заработало.