Created
February 1, 2020 14:11
-
-
Save shelld0n/2bec88b0c4c8959201a9b7cde86f499b to your computer and use it in GitHub Desktop.
CreateProcessWithToken_definitions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public enum LogonFlags | |
{ | |
WithProfile = 1, | |
NetCredentialsOnly | |
} | |
public enum CreationFlags | |
{ | |
DefaultErrorMode = 0x04000000, | |
NewConsole = 0x00000010, | |
NewProcessGroup = 0x00000200, | |
SeparateWOWVDM = 0x00000800, | |
Suspended = 0x00000004, | |
UnicodeEnvironment = 0x00000400, | |
ExtendedStartupInfoPresent = 0x00080000 | |
} | |
[StructLayout(LayoutKind.Sequential)] | |
internal struct STARTUPINFO | |
{ | |
internal int cb; | |
[MarshalAs(UnmanagedType.LPTStr)] | |
internal string lpReserved; | |
[MarshalAs(UnmanagedType.LPTStr)] | |
internal string lpDesktop; | |
[MarshalAs(UnmanagedType.LPTStr)] | |
internal string lpTitle; | |
internal int dwX; | |
internal int dwY; | |
internal int dwXSize; | |
internal int dwYSize; | |
internal int dwXCountChars; | |
internal int dwYCountChars; | |
internal int dwFillAttribute; | |
internal int dwFlags; | |
internal short wShowWindow; | |
internal short cbReserved2; | |
internal IntPtr lpReserved2; | |
internal IntPtr hStdInput; | |
internal IntPtr hStdOutput; | |
internal IntPtr hStdError; | |
} | |
[StructLayout(LayoutKind.Sequential)] | |
internal struct PROCESS_INFORMATION | |
{ | |
internal IntPtr hProcess; | |
internal IntPtr hThread; | |
internal int dwProcessId; | |
internal int dwThreadId; | |
} | |
// CreateProcessWithTokenW Signature | |
[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, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation); | |
[StructLayout(LayoutKind.Sequential)] | |
public struct SECURITY_ATTRIBUTES | |
{ | |
public int nLength; | |
public IntPtr lpSecurityDescriptor; | |
public int bInheritHandle; | |
} | |
public enum TOKEN_TYPE | |
{ | |
TokenPrimary = 1, | |
TokenImpersonation | |
} | |
public enum SECURITY_IMPERSONATION_LEVEL | |
{ | |
SecurityAnonymous, | |
SecurityIdentification, | |
SecurityImpersonation, | |
SecurityDelegation | |
} | |
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] | |
public extern static bool DuplicateTokenEx(IntPtr hExistingToken, uint dwDesiredAccess, ref SECURITY_ATTRIBUTES lpTokenAttributes, SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, TOKEN_TYPE TokenType, out IntPtr phNewToken); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment