2011-11-16 78 views
7

我試圖使用CreateProcessWithTokenW() win32 API函數以令牌啓動一個新進程。問題是我對win32 API很陌生,我不知道如何正確使用這個函數,以及需要哪些結構等等。有人能給我提供一個如何在C#中正確使用函數的例子嗎?CreateProcessWithTokenW - 在C#中使用的示例

+1

你想從哪裏獲取令牌?究竟是什麼驅使你使用這個功能? –

+0

我猜你正在嘗試做類似於此處所述的內容:http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows -service-in-windows-vista-and-later.aspx –

回答

4

這是託管代碼,所以你需要使用的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); 

您可以使用一個enum這樣的LogonFlags參數去傳遞(以保持.NET的感覺:)):

public enum LogonFlags 
{ 
    WithProfile = 1, 
    NetCredentialsOnly 
} 

這裏是爲CreationFlags枚舉提供的文檔here以下

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

有關更多信息,請參閱p/invoke.net上的此功能:http://www.pinvoke.net/default.aspx/Structures/CreateProcessWithTokenW.html –

+0

@非常感謝你,經驗教訓 –

+0

@DavidHeffernan:NP,謝謝關心! – Will

相關問題