2011-11-16 38 views
7

Tôi đang cố sử dụng hàm API win32 CreateProcessWithTokenW() để bắt đầu quy trình mới với mã thông báo. Vấn đề là tôi khá mới với API win32 và tôi không có ý tưởng làm thế nào để sử dụng các chức năng đúng, và mà cấu trúc vv đó là cần thiết. Ai đó có thể cung cấp cho tôi một ví dụ về cách sử dụng đúng chức năng trong C#?CreateProcessWithTokenW - Ví dụ về cách sử dụng trong C#

+1

Bạn muốn nhận mã thông báo từ đâu? Chính xác thì điều gì đang dẫn bạn đến chức năng này? –

+0

Tôi đoán bạn đang cố gắng làm một cái gì đó giống như những gì được mô tả ở đây: http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows -service-in-windows-vista-and-later.aspx –

Trả lời

4

Đây là mã không được quản lý, do đó bạn cần phải sử dụng P/Invoke (Platform Invoke), đây là chữ ký chức năng cho 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); 

Bạn có thể sử dụng một enum như thế này để vượt qua trong các LogonFlags param (để giữ cho cảm giác .net :)):

public enum LogonFlags 
{ 
    WithProfile = 1, 
    NetCredentialsOnly 
} 

đây là enum cho CreationFlags sau khi tài liệu có sẵn here:

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

Để biết thêm thông tin, hãy xem hàm này trên p/invoke.net: http://www.pinvoke.net/default.aspx/Structures/CreateProcessWithTokenW.html –

+0

@ sẽ cảm ơn bạn rất nhiều, bài học kinh nghiệm –

+0

@DavidHeffernan: NP, cảm ơn vì đã quan tâm! – Will

Các vấn đề liên quan