CreateProcessWithTokenW - пример использования в C # - PullRequest
8 голосов
/ 16 ноября 2011

Я пытаюсь использовать функцию CreateProcessWithTokenW() win32 API для запуска нового процесса с токеном.Проблема в том, что я довольно новичок в Win32 API и не знаю, как правильно использовать функцию, какие структуры и т. Д. Необходимы.Может ли кто-нибудь предоставить мне пример того, как правильно использовать функцию в C #?

1 Ответ

5 голосов
/ 16 ноября 2011

Это неуправляемый код, поэтому вам нужно использовать P / Invoke (Platform 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 (чтобы сохранить чувство .net :)):

public enum LogonFlags
{
     WithProfile = 1,
     NetCredentialsOnly
}

Вот перечисление для CreationFlags в соответствии с доступной документацией здесь :

public enum CreationFlags
{
    DefaultErrorMode = 0x04000000,
    NewConsole = 0x00000010,
    NewProcessGroup = 0x00000200,
    SeparateWOWVDM = 0x00000800,
    Suspended = 0x00000004,
    UnicodeEnvironment = 0x00000400,
    ExtendedStartupInfoPresent = 0x00080000
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...