CreateProcessWithTokenW - C#中的用法示例

use*_*697 8 c# winapi

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

Nas*_*ine 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);
Run Code Online (Sandbox Code Playgroud)

您可以使用这样的枚举传入LogonFlags参数(以保持.net的感觉:)):

public enum LogonFlags
{
     WithProfile = 1,
     NetCredentialsOnly
}
Run Code Online (Sandbox Code Playgroud)

以下是此处CreationFlags提供的文档的枚举:

public enum CreationFlags
{
    DefaultErrorMode = 0x04000000,
    NewConsole = 0x00000010,
    NewProcessGroup = 0x00000200,
    SeparateWOWVDM = 0x00000800,
    Suspended = 0x00000004,
    UnicodeEnvironment = 0x00000400,
    ExtendedStartupInfoPresent = 0x00080000
}
Run Code Online (Sandbox Code Playgroud)