From 94a6bf4cf562922374c7961957772a8c2ec744a8 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Fri, 1 Jan 2016 14:16:04 +0000 Subject: [PATCH] [ADVAPI32] CreateProcessAsUserA/W: Make hToken optional. svn path=/trunk/; revision=70478 --- reactos/dll/win32/advapi32/misc/logon.c | 58 ++++++++++++++----------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/reactos/dll/win32/advapi32/misc/logon.c b/reactos/dll/win32/advapi32/misc/logon.c index 25cf381d9f6..b3ca1f708f3 100644 --- a/reactos/dll/win32/advapi32/misc/logon.c +++ b/reactos/dll/win32/advapi32/misc/logon.c @@ -125,20 +125,23 @@ CreateProcessAsUserA(HANDLE hToken, return FALSE; } - AccessToken.Token = hToken; - AccessToken.Thread = NULL; - - /* Set the new process token */ - Status = NtSetInformationProcess(lpProcessInformation->hProcess, - ProcessAccessToken, - (PVOID)&AccessToken, - sizeof(AccessToken)); - if (!NT_SUCCESS (Status)) + if (hToken != NULL) { - ERR("NtSetInformationProcess failed: 0x%08x\n", Status); - TerminateProcess(lpProcessInformation->hProcess, Status); - SetLastError(RtlNtStatusToDosError(Status)); - return FALSE; + AccessToken.Token = hToken; + AccessToken.Thread = NULL; + + /* Set the new process token */ + Status = NtSetInformationProcess(lpProcessInformation->hProcess, + ProcessAccessToken, + (PVOID)&AccessToken, + sizeof(AccessToken)); + if (!NT_SUCCESS (Status)) + { + ERR("NtSetInformationProcess failed: 0x%08x\n", Status); + TerminateProcess(lpProcessInformation->hProcess, Status); + SetLastError(RtlNtStatusToDosError(Status)); + return FALSE; + } } /* Resume the main thread */ @@ -190,20 +193,23 @@ CreateProcessAsUserW(HANDLE hToken, return FALSE; } - AccessToken.Token = hToken; - AccessToken.Thread = NULL; - - /* Set the new process token */ - Status = NtSetInformationProcess(lpProcessInformation->hProcess, - ProcessAccessToken, - (PVOID)&AccessToken, - sizeof(AccessToken)); - if (!NT_SUCCESS (Status)) + if (hToken != NULL) { - ERR("NtSetInformationProcess failed: 0x%08x\n", Status); - TerminateProcess(lpProcessInformation->hProcess, Status); - SetLastError(RtlNtStatusToDosError(Status)); - return FALSE; + AccessToken.Token = hToken; + AccessToken.Thread = NULL; + + /* Set the new process token */ + Status = NtSetInformationProcess(lpProcessInformation->hProcess, + ProcessAccessToken, + (PVOID)&AccessToken, + sizeof(AccessToken)); + if (!NT_SUCCESS (Status)) + { + ERR("NtSetInformationProcess failed: 0x%08x\n", Status); + TerminateProcess(lpProcessInformation->hProcess, Status); + SetLastError(RtlNtStatusToDosError(Status)); + return FALSE; + } } /* Resume the main thread */