2011-11-16 15 views
7

Estoy tratando de usar la función CreateProcessWithTokenW() win32 API para iniciar un nuevo proceso con un token. El problema es que soy bastante nuevo en la API de win32 y no tengo ni idea de cómo usar la función correctamente, y qué estructuras, etc. son necesarias. ¿Podría alguien darme un ejemplo de cómo usar la función correctamente en C#?CreateProcessWithTokenW - Ejemplo de uso en C#

+1

¿De dónde quieres obtener tu ficha? ¿Qué te conduce exactamente a esta función? –

+0

Supongo que está intentando hacer algo como lo que se describe aquí: http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows -service-in-windows-vista-and-later.aspx –

Respuesta

4

Este es el código no administrado por lo que necesita para utilizar P/Invoke (invocación de plataforma), aquí está la firma de la función de CreateProcessWithTokenW():

[DllImport("advapi32", SetLastError = true, CharSet = CharSet.Unicode)] 
public static extern bool CreateProcessWithTokenW(
    IntPtr hToken, 
    LogonFlags dwLogonFlags, 
    string lpApplicationName, 
    string lpCommandLine, 
    CreationFlags dwCreationFlags, 
    IntPtr lpEnvironment, 
    string lpCurrentDirectory, 
    [In] ref STARTUPINFO lpStartupInfo, 
    out PROCESS_INFORMATION lpProcessInformation); 

Se puede utilizar una enumeración como este para pasar en el LogonFlags parámetro (a mantener la sensación .net :)):

public enum LogonFlags 
{ 
    WithProfile = 1, 
    NetCredentialsOnly 
} 

Aquí está la enumeración para el siguiente CreationFlags la documentación disponible here:

public enum CreationFlags 
{ 
    DefaultErrorMode = 0x04000000, 
    NewConsole = 0x00000010, 
    NewProcessGroup = 0x00000200, 
    SeparateWOWVDM = 0x00000800, 
    Suspended = 0x00000004, 
    UnicodeEnvironment = 0x00000400, 
    ExtendedStartupInfoPresent = 0x00080000 
} 
+0

Para obtener más información, consulte esta función en p/invoke.net: http://www.pinvoke.net/default.aspx/Structures/CreateProcessWithTokenW.html –

+0

@ Te agradeceré mucho, lección aprendida –

+0

@DavidHeffernan: NP, ¡gracias por cuidar! – Will

Cuestiones relacionadas