CreateProcessWithTokenW - C#中的用法示例

时间:2011-11-16 17:41:51

标签: c# winapi

我正在尝试使用CreateProcessWithTokenW() win32 API函数来启动带有令牌的新进程。问题是我对win32 API很新,我不知道如何正确使用该函数,以及需要哪些结构等。有人可以给我一个如何在C#中正确使用该函数的例子吗?

1 个答案:

答案 0 :(得分:5)

这是非托管代码,因此您需要使用P / Invoke(平台调用),这是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);

你可以使用这样的枚举来传递LogonFlags param(以保持.net的感觉:) :):

public enum LogonFlags
{
     WithProfile = 1,
     NetCredentialsOnly
}

以下是可用文档hereCreationFlags的枚举:

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