LogonUser -> CreateProcessAsUser da un servizio di sistema
-
24-10-2019 - |
Domanda
Ho letto tutti i messaggi su Stack Overflow su CreateProcessAsUser e ci sono pochissime domande risolte, quindi non sto trattenendo il respiro su questo. Ma sembra che io sono sicuramente manca qualcosa, quindi potrebbe essere facile.
Il sistema operativo di destinazione è Windows XP. Ho un servizio in esecuzione come "sistema locale" da cui voglio creare un processo in esecuzione come un altro utente. Per l'utente, ho il nome utente e la password, in modo da LogonUser va bene e ottengo un token per l'utente (in questo caso, un account di amministratore.) Allora provo a utilizzare tale token per chiamare CreateProcessAsUser, ma non è riuscito perché quella pedina non viene con SeAssignPrimaryTokenPrivilege - tuttavia, non hanno SeIncreaseQuotaPrivilege. (Io ho usato GetTokenInformation fare uscire tutti i privilegi associati a tale token.) Secondo la pagina di MSDN per CreateProcessAsUser, è necessario che entrambi i privilegi per chiamare CreateProcessAsUser con successo.
Si dice anche che non è necessario il SeAssignPrimaryTokenPrivilege se il token si passa a CreateProcessAsUser () è una "versione ristretta del processo chiamante primaria di token", che posso creare con CreateRestrictedToken (), ma allora sarà essere associato con l'utente di sistema locale e non l'utente di destinazione che sto cercando di eseguire il processo come.
Così come dovrei creare un token di accesso che è sia una versione ristretta del processo chiamante token primario, ed è associata ad un altro utente? Grazie!
Si noti che non v'è alcuna necessità di interazione con l'utente qui - è tutto incustodito -. Quindi non c'è bisogno di fare cose come afferrare winsta0, etc
Soluzione
SE_ASSIGNPRIMARYTOKEN_NAME è un privilegio si può attivare nel vostro processo / thread con OpenProcessToken / OpenThreadToken + LookupPrivilegeValue + AdjustTokenPrivileges (E 'facile confondere questo con TOKEN_ASSIGN_PRIMARY , e MSDN dice che è necessario sia per collegare un token primario a un processo)
In questa XP: Macchina SP2, basta chiamare LogonUser (..., LOGON32_LOGON_INTERACTIVE, ...) + CreateProcessAsUser funziona bene senza fare confusione con alcun privilegio (Utilizzando un servizio falso cmd.exe, ma che non dovrebbe importare)
Questa citazione su MSDN:
Se i privilegi necessari non sono già attivato, CreateProcessAsUser li abilita per la durata del chiamata ??p>
e il fatto che si esegue come sistema e deve essere in grado di attivare qualsiasi cavo privilegio farmi credere che questa roba primaria assegnare non è il problema.