CreateProcessAsUser no establece al usuario correctamente
-
30-10-2019 - |
Pregunta
Llamar a una aplicación GUI usando
[DllImport(
"advapi32.dll",
EntryPoint = "CreateProcessAsUser",
SetLastError = true,
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
private static extern bool CreateProcessAsUser(
IntPtr hToken,
string lpApplicationName,
string lpCommandLine,
ref SECURITY_ATTRIBUTES lpProcessAttributes,
ref SECURITY_ATTRIBUTES lpThreadAttributes,
bool bInheritHandle,
int dwCreationFlags,
IntPtr lpEnvironment,
string lpCurrentDirectory,
ref STARTUPINFO lpStartupInfo,
out PROCESS_INFORMATION lpProcessInformation);
bool result = CreateProcessAsUser(
hUserTokenDup,
null,
applicationName + " " + arguments,
ref sa, // pointer to process SECURITY_ATTRIBUTES
ref sa, // pointer to thread SECURITY_ATTRIBUTES
false, // handles are not inheritable
NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, // creation flags
IntPtr.Zero, // pointer to new environment block
null, // name of current directory
ref si, // pointer to STARTUPINFO structure
out procInfo); // receives information about new process
Desde un servicio de Windows de LocalSystem Windows funciona. La ventana aparece en la pantalla del usuario, pero el usuario del proceso todavía es LocalSystem. ¿Hay alguna forma de cambiar eso?
PD Según lo solicitado, obtengo hUserTokenDup
de
[DllImport("advapi32.dll", EntryPoint = "DuplicateTokenEx")]
private static extern bool DuplicateTokenEx(
IntPtr ExistingTokenHandle,
uint dwDesiredAccess,
ref SECURITY_ATTRIBUTES lpThreadAttributes,
int TokenType,
int ImpersonationLevel,
ref IntPtr DuplicateTokenHandle);
DuplicateTokenEx(
hPToken,
MAXIMUM_ALLOWED,
ref sa,
(int)SECURITY_IMPERSONATION_LEVEL.SecurityIdentification,
(int)TOKEN_TYPE.TokenPrimary,
ref hUserTokenDup);
No hay solución correcta
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow