diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec index 5845ae0878f..8ebc5805add 100644 --- a/dlls/advapi32/advapi32.spec +++ b/dlls/advapi32/advapi32.spec @@ -137,9 +137,9 @@ @ stdcall CreatePrivateObjectSecurity(ptr ptr ptr long long ptr) @ stdcall CreatePrivateObjectSecurityEx(ptr ptr ptr ptr long long long ptr) @ stdcall CreatePrivateObjectSecurityWithMultipleInheritance(ptr ptr ptr ptr long long long long ptr) -@ stdcall CreateProcessAsUserA(long str str ptr ptr long long ptr str ptr ptr) +@ stdcall CreateProcessAsUserA(long str str ptr ptr long long ptr str ptr ptr) kernel32.CreateProcessAsUserA # @ stub CreateProcessAsUserSecure -@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) +@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessAsUserW @ stdcall CreateProcessWithLogonW(wstr wstr wstr long wstr wstr long ptr wstr ptr ptr) @ stdcall CreateProcessWithTokenW(long long wstr wstr long ptr wstr ptr ptr) @ stdcall CreateRestrictedToken(long long long ptr long ptr long ptr ptr) diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c index d010d4cae87..16512d094c8 100644 --- a/dlls/advapi32/security.c +++ b/dlls/advapi32/security.c @@ -5562,97 +5562,6 @@ BOOL WINAPI DestroyPrivateObjectSecurity( PSECURITY_DESCRIPTOR* ObjectDescriptor return TRUE; } -BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessAsUserA( - HANDLE hToken, - LPCSTR lpApplicationName, - LPSTR lpCommandLine, - LPSECURITY_ATTRIBUTES lpProcessAttributes, - LPSECURITY_ATTRIBUTES lpThreadAttributes, - BOOL bInheritHandles, - DWORD dwCreationFlags, - LPVOID lpEnvironment, - LPCSTR lpCurrentDirectory, - LPSTARTUPINFOA lpStartupInfo, - LPPROCESS_INFORMATION lpProcessInformation ) -{ - 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); - - 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); - heap_free(appW); - heap_free(cmdlnW); - heap_free(cwdW); - heap_free(sinfo.lpReserved); - heap_free(sinfo.lpDesktop); - heap_free(sinfo.lpTitle); - - return ret; -} - -BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessAsUserW( - HANDLE hToken, - LPCWSTR lpApplicationName, - LPWSTR lpCommandLine, - LPSECURITY_ATTRIBUTES lpProcessAttributes, - LPSECURITY_ATTRIBUTES lpThreadAttributes, - BOOL bInheritHandles, - DWORD dwCreationFlags, - LPVOID lpEnvironment, - LPCWSTR lpCurrentDirectory, - LPSTARTUPINFOW lpStartupInfo, - LPPROCESS_INFORMATION lpProcessInformation ) -{ - FIXME("%p %s %s %p %p %d 0x%08x %p %s %p %p - semi-stub\n", hToken, - debugstr_w(lpApplicationName), debugstr_w(lpCommandLine), lpProcessAttributes, - lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, - debugstr_w(lpCurrentDirectory), lpStartupInfo, lpProcessInformation); - - /* We should create the process with a suspended main thread */ - if (!CreateProcessW (lpApplicationName, - lpCommandLine, - lpProcessAttributes, - lpThreadAttributes, - bInheritHandles, - dwCreationFlags, /* CREATE_SUSPENDED */ - lpEnvironment, - lpCurrentDirectory, - lpStartupInfo, - lpProcessInformation)) - { - return FALSE; - } - - return TRUE; -} - /****************************************************************************** * CreateProcessWithLogonW */ diff --git a/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec b/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec index 154c875f814..eb2a4bdd6bd 100644 --- a/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec +++ b/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec @@ -1,5 +1,5 @@ @ stdcall CreateProcessA(str str ptr ptr long long ptr str ptr ptr) kernel32.CreateProcessA -@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW +@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessAsUserW @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread @ stdcall CreateRemoteThreadEx(long ptr long ptr ptr long ptr ptr) kernel32.CreateRemoteThreadEx diff --git a/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec b/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec index 22a091ad07a..563bd79b67d 100644 --- a/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec +++ b/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec @@ -1,5 +1,5 @@ @ stdcall CreateProcessA(str str ptr ptr long long ptr str ptr ptr) kernel32.CreateProcessA -@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW +@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessAsUserW @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread @ stdcall CreateRemoteThreadEx(long ptr long ptr ptr long ptr ptr) kernel32.CreateRemoteThreadEx diff --git a/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec b/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec index 180ec48012c..85830a11fc3 100644 --- a/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec +++ b/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec @@ -1,5 +1,5 @@ @ stdcall CreateProcessA(str str ptr ptr long long ptr str ptr ptr) kernel32.CreateProcessA -@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW +@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessAsUserW @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread @ stdcall CreateRemoteThreadEx(long ptr long ptr ptr long ptr ptr) kernel32.CreateRemoteThreadEx diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 80da9c8e2e2..c38b8f81f52 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -313,7 +313,8 @@ # @ stub CreatePrivateNamespaceA # @ stub CreatePrivateNamespaceW @ stdcall CreateProcessA(str str ptr ptr long long ptr str ptr ptr) -# @ stub CreateProcessAsUserW +@ stdcall CreateProcessAsUserA(long str str ptr ptr long long ptr str ptr ptr) +@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) @ stdcall CreateProcessInternalA(long str str ptr ptr long long ptr str ptr ptr ptr) @ stdcall CreateProcessInternalW(long wstr wstr ptr ptr long long ptr wstr ptr ptr ptr) # @ stub CreateProcessInternalWSecure diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index 4d30f3a4fd3..53b1b2d933a 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -2871,6 +2871,36 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW( LPCWSTR app_name, LPWSTR cmd_line, } +/********************************************************************** + * CreateProcessAsUserA (KERNEL32.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessAsUserA( HANDLE token, LPCSTR app_name, LPSTR cmd_line, + LPSECURITY_ATTRIBUTES process_attr, + LPSECURITY_ATTRIBUTES thread_attr, + BOOL inherit, DWORD flags, LPVOID env, LPCSTR cur_dir, + LPSTARTUPINFOA startup_info, + LPPROCESS_INFORMATION info ) +{ + return CreateProcessInternalA( token, app_name, cmd_line, process_attr, thread_attr, + inherit, flags, env, cur_dir, startup_info, info, NULL ); +} + + +/********************************************************************** + * CreateProcessAsUserW (KERNEL32.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessAsUserW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_line, + LPSECURITY_ATTRIBUTES process_attr, + LPSECURITY_ATTRIBUTES thread_attr, + BOOL inherit, DWORD flags, LPVOID env, LPCWSTR cur_dir, + LPSTARTUPINFOW startup_info, + LPPROCESS_INFORMATION info ) +{ + return CreateProcessInternalW( token, app_name, cmd_line, process_attr, thread_attr, + inherit, flags, env, cur_dir, startup_info, info, NULL ); +} + + /********************************************************************** * exec_process */ diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index d79957193a9..9e51ae44e0e 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -206,8 +206,8 @@ @ stdcall CreatePrivateObjectSecurityEx(ptr ptr ptr ptr long long long ptr) advapi32.CreatePrivateObjectSecurityEx @ stdcall CreatePrivateObjectSecurityWithMultipleInheritance(ptr ptr ptr ptr long long long long ptr) advapi32.CreatePrivateObjectSecurityWithMultipleInheritance @ stdcall CreateProcessA(str str ptr ptr long long ptr str ptr ptr) kernel32.CreateProcessA -@ stdcall CreateProcessAsUserA(long str str ptr ptr long long ptr str ptr ptr) advapi32.CreateProcessAsUserA -@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW +@ stdcall CreateProcessAsUserA(long str str ptr ptr long long ptr str ptr ptr) kernel32.CreateProcessAsUserA +@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessAsUserW @ stdcall CreateProcessInternalA(long str str ptr ptr long long ptr str ptr ptr ptr) kernel32.CreateProcessInternalA @ stdcall CreateProcessInternalW(long wstr wstr ptr ptr long long ptr wstr ptr ptr ptr) kernel32.CreateProcessInternalW @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW