2011-11-16 1 views
7

J'essaie d'utiliser la fonction APIwin32 pour démarrer un nouveau processus avec un jeton. Le problème est que je suis tout à fait nouveau à l'API Win32 et je n'ai aucune idée de la façon d'utiliser la fonction correctement, et quels structs etc. sont nécessaires. Quelqu'un pourrait-il me fournir un exemple de la façon d'utiliser la fonction correctement en C#?CreateProcessWithTokenW - Exemple d'utilisation en C#

+1

D'où voulez-vous obtenir votre jeton? Qu'est-ce qui vous pousse exactement à cette fonction? –

+0

Je suppose que vous essayez de faire quelque chose comme ce qui est décrit ici: http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows -service-dans-windows-vista-and-later.aspx –

Répondre

4

C'est un code non géré de sorte que vous devez utiliser P/Invoke (Platform Invoke), voici la signature de fonction pour 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); 

Vous pouvez utiliser un ENUM comme celui-ci pour passer dans le LogonFlags param (à garder le sentiment .net :)):

public enum LogonFlags 
{ 
    WithProfile = 1, 
    NetCredentialsOnly 
} 

Voici le ENUM pour le CreationFlags suivant la documentation disponible here:

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

Pour plus d'informations, voir cette fonction sur p/invoke.net: http://www.pinvoke.net/default.aspx/Structures/CreateProcessWithTokenW.html –

+0

@ Merci beaucoup, leçon apprise –

+0

@DavidHeffernan: NP, merci de votre attention! – Will