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

È stato utile?

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

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top