Module: wine Branch: master Commit: eaf709fb19f0d376da41847be60299cdd35b04e1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=eaf709fb19f0d376da41847be6...
Author: Andrew Eikum aeikum@codeweavers.com Date: Thu Sep 13 15:54:41 2012 -0500
advapi32: Implement CreateProcessAsUserA.
---
dlls/advapi32/security.c | 39 +++++++++++++++++++++++++++++++++++++-- 1 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c index 83558ae..8b60dd6 100644 --- a/dlls/advapi32/security.c +++ b/dlls/advapi32/security.c @@ -5091,11 +5091,46 @@ BOOL WINAPI CreateProcessAsUserA( LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ) { - FIXME("%p %s %s %p %p %d 0x%08x %p %s %p %p - stub\n", hToken, debugstr_a(lpApplicationName), + BOOL ret; + WCHAR *appW, *cmdlnW, *cwdW; + STARTUPINFOW sinfo; + + TRACE("%p %s %s %p %p %d 0x%08x %p %s %p %p\n", hToken, debugstr_a(lpApplicationName), debugstr_a(lpCommandLine), lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, debugstr_a(lpCurrentDirectory), lpStartupInfo, lpProcessInformation);
- return FALSE; + appW = SERV_dup(lpApplicationName); + cmdlnW = SERV_dup(lpCommandLine); + cwdW = SERV_dup(lpCurrentDirectory); + sinfo.cb = sizeof(sinfo); + sinfo.lpReserved = SERV_dup(lpStartupInfo->lpReserved); + sinfo.lpDesktop = SERV_dup(lpStartupInfo->lpDesktop); + sinfo.lpTitle = SERV_dup(lpStartupInfo->lpTitle); + sinfo.dwX = lpStartupInfo->dwX; + sinfo.dwY = lpStartupInfo->dwY; + sinfo.dwXSize = lpStartupInfo->dwXSize; + sinfo.dwYSize = lpStartupInfo->dwYSize; + sinfo.dwXCountChars = lpStartupInfo->dwXCountChars; + sinfo.dwYCountChars = lpStartupInfo->dwYCountChars; + sinfo.dwFillAttribute = lpStartupInfo->dwFillAttribute; + sinfo.dwFlags = lpStartupInfo->dwFlags; + sinfo.wShowWindow = lpStartupInfo->wShowWindow; + sinfo.cbReserved2 = lpStartupInfo->cbReserved2; + sinfo.lpReserved2 = lpStartupInfo->lpReserved2; + sinfo.hStdInput = lpStartupInfo->hStdInput; + sinfo.hStdOutput = lpStartupInfo->hStdOutput; + sinfo.hStdError = lpStartupInfo->hStdError; + ret = CreateProcessAsUserW(hToken, appW, cmdlnW, lpProcessAttributes, + lpThreadAttributes, bInheritHandles, dwCreationFlags, + lpEnvironment, cwdW, &sinfo, lpProcessInformation); + HeapFree(GetProcessHeap(), 0, appW); + HeapFree(GetProcessHeap(), 0, cmdlnW); + HeapFree(GetProcessHeap(), 0, cwdW); + HeapFree(GetProcessHeap(), 0, sinfo.lpReserved); + HeapFree(GetProcessHeap(), 0, sinfo.lpDesktop); + HeapFree(GetProcessHeap(), 0, sinfo.lpTitle); + + return ret; }
BOOL WINAPI CreateProcessAsUserW(