2011-11-16 46 views
7

CreateProcessWithTokenW() win32 API関数を使用してトークンで新しいプロセスを開始しようとしています。問題は、私はwin32 APIの新機能であり、どのように関数を適切に使用するか、どの構造体などが必要なのか分かりません。誰かがC#で関数を正しく使う方法の例を私に教えてもらえますか?あなたがに(LogonFlagsのparamに渡すために、次のように列挙型を使用することができますCreateProcessWithTokenW - C#での使用例

[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); 

+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 /呼び出し(プラットフォーム呼び出し)を使用する必要があるので、これは、アンマネージコードでは、ここでCreateProcessWithTokenW()のための関数のシグネチャです):) .NET感を保つ:

public enum LogonFlags 
{ 
    WithProfile = 1, 
    NetCredentialsOnly 
} 

ここhere利用できるドキュメント以下CreationFlagsための列挙です:

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

関連する問題