CreateProcessAsUser (advapi32)
Last changed: -87.186.76.92

.
Summary

C# Signature:

[DllImport("advapi32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern bool CreateProcessAsUser(
    IntPtr hToken,
    string lpApplicationName,
    [In] StringBuilder lpCommandLine,
    ref SECURITY_ATTRIBUTES lpProcessAttributes,
    ref SECURITY_ATTRIBUTES lpThreadAttributes,
    bool bInheritHandles,
    uint dwCreationFlags,
    IntPtr lpEnvironment,
    string lpCurrentDirectory,
    ref STARTUPINFO lpStartupInfo,
    out PROCESS_INFORMATION lpProcessInformation);     

VB Signature :

Private Declare Auto Function CreateProcessAsUser Lib "advapi32" ( _
    ByVal hToken As IntPtr, _
    ByVal strApplicationName As String, _
    ByVal strCommandLine As String, _
    ByRef lpProcessAttributes as SECURITY_ATTRIBUTES, _
    ByRef lpThreadAttributes as SECURITY_ATTRIBUTES, _
    ByVal bInheritHandles as Boolean, _
    ByVal dwCreationFlags As Integer, _
    ByVal lpEnvironment As IntPtr, _
    ByVal lpCurrentDriectory As Integer, _
    ByRef lpStartupInfo As STARTUPINFO, _
    ByRef lpProcessInformation As PROCESS_INFORMATION) As Integer

User-Defined Types:

SECURITY_ATTRIBUTES

PROCESS_INFORMATION

STARTUPINFO

LOGON_TYPE

LOGON_PROVIDER

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

Dim pi As PROCESS_INFORMATION
Dim si As STARTUPINFO
Dim hToken as System.IntPtr
If LogonUser(userPart, domainPart, password, LOGON_TYPE.LOGON32_LOGON_BATCH, _
          LOGON_PROVIDER.LOGON32_PROVIDER_DEFAULT, hToken) Then

     Dim saProcessAttributes as SECURITY_ATTRIBUTES = new SECURITY_ATTRIBUTES
     Dim saThreadAttributes as SECURITY_ATTRIBUTES = new SECURITY_ATTRIBUTES  
     If CreateProcessAsUser(hToken, "", strCmdLine, saProcessAttributes, _
     saThreadAttributes, False, 0, IntPtr.Zero, 0, si, pi) Then

     Throw New Exception(Err.Description)
     End If
End If

Alternative Managed API:

Do you know one? Please contribute it!

Documentation