tags:

views:

19

answers:

0

Hi,

A processA having UserA credentials runs a processB with UserB credentials.
I'm using CreateProcessWithLogonW with LOADING_PROFILE (needed)
I'd like to add some new environment variable to the processB like :

HOMEDRIVE = UserA HOMEDRIVE
HOMEPATH = UserA HOMEPATH
CALLINGUSER = UserA USERNAME

Here is the VB6 function I'm using (which is working)

Public Function RunAsUser(ByVal UserName As String, ByVal Password As String, ByVal DomainName As String, ByVal CommandLine As String, ByVal CurrentDirectory As String) As Long

    Dim si As STARTUPINFO
    Dim pi As PROCESS_INFORMATION

    Dim wUser As String
    Dim wDomain As String
    Dim wPassword As String
    Dim wCommandLine As String
    Dim wCurrentDir As String

    Dim Result As Long

    si.cb = Len(si)

    wUser = StrConv(UserName + Chr$(0), vbUnicode)
    wDomain = StrConv(DomainName + Chr$(0), vbUnicode)
    wPassword = StrConv(Password + Chr$(0), vbUnicode)
    wCommandLine = StrConv(CommandLine + Chr$(0), vbUnicode)
    wCurrentDir = StrConv(CurrentDirectory + Chr$(0), vbUnicode)

    Result = CreateProcessWithLogonW(wUser, wDomain, wPassword, &H1, 0&, wCommandLine, &H4000000, 0&, wCurrentDir, si, pi)
    If Result <> 0 Then
        CloseHandle pi.hThread
        CloseHandle pi.hProcess
        RunAsUser = 0
    Else
        RunAsUser = Err.LastDllError
        MsgBox "CreateProcessWithLogonW() failed with error " & Err.LastDllError, vbExclamation
    End If

End Function