Author: mjansen
Date: Tue Dec 20 19:51:44 2016
New Revision: 73473
URL: http://svn.reactos.org/svn/reactos?rev=73473&view=rev
Log:
[KERNEL32] Re-enable Safer and AppCompat checks in CreateProcessInternalW. CORE-12585
Modified:
trunk/reactos/dll/win32/kernel32/client/proc.c
Modified: trunk/reactos/dll/win32/kernel32/client/proc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/proc.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/proc.c [iso-8859-1] Tue Dec 20 19:51:44 2016
@@ -2313,7 +2313,7 @@
HANDLE FileHandle, SectionHandle, ProcessHandle;
ULONG ResumeCount;
PROCESS_PRIORITY_CLASS PriorityClass;
- NTSTATUS Status, Status1, ImageDbgStatus;
+ NTSTATUS Status, AppCompatStatus, SaferStatus, IFEOStatus, ImageDbgStatus;
PPEB Peb, RemotePeb;
PTEB Teb;
INITIAL_TEB InitialTeb;
@@ -2386,7 +2386,7 @@
/* Zero out the initial core variables and handles */
QuerySection = FALSE;
InJob = FALSE;
- SkipSaferAndAppCompat = TRUE; // HACK for making .bat/.cmd launch working again.
+ SkipSaferAndAppCompat = FALSE;
ParameterFlags = 0;
Flags = 0;
DebugHandle = NULL;
@@ -3051,12 +3051,12 @@
if (QuerySection)
{
/* Nothing to do */
- Status = STATUS_SUCCESS;
+ AppCompatStatus = STATUS_SUCCESS;
}
else
{
/* Get some information about the executable */
- Status = NtQuerySection(SectionHandle,
+ AppCompatStatus = NtQuerySection(SectionHandle,
SectionImageInformation,
&ImageInformation,
sizeof(ImageInformation),
@@ -3064,7 +3064,7 @@
}
/* Do we have section information now? */
- if (NT_SUCCESS(Status))
+ if (NT_SUCCESS(AppCompatStatus))
{
/* Don't ask for it again, save the machine type */
QuerySection = TRUE;
@@ -3073,7 +3073,7 @@
}
/* Is there a reason/Shim we shouldn't run this application? */
- Status = BasepCheckBadapp(FileHandle,
+ AppCompatStatus = BasepCheckBadapp(FileHandle,
FreeBuffer,
lpEnvironment,
ImageMachine,
@@ -3082,11 +3082,11 @@
&AppCompatSxsData,
&AppCompatSxsDataSize,
&FusionFlags);
- if (!NT_SUCCESS(Status))
+ if (!NT_SUCCESS(AppCompatStatus))
{
/* This is usually the status we get back */
- DPRINT1("App compat launch failure: %lx\n", Status);
- if (Status == STATUS_ACCESS_DENIED)
+ DPRINT1("App compat launch failure: %lx\n", AppCompatStatus);
+ if (AppCompatStatus == STATUS_ACCESS_DENIED)
{
/* Convert it to something more Win32-specific */
SetLastError(ERROR_CANCELLED);
@@ -3094,7 +3094,7 @@
else
{
/* Some other error */
- BaseSetLastNTError(Status);
+ BaseSetLastNTError(AppCompatStatus);
}
/* Did we have a section? */
@@ -3148,13 +3148,13 @@
if (SaferNeeded)
{
/* We have to call into the WinSafer library and actually check */
- Status = BasepCheckWinSaferRestrictions(hUserToken,
+ SaferStatus = BasepCheckWinSaferRestrictions(hUserToken,
(LPWSTR)lpApplicationName,
FileHandle,
&InJob,
&TokenHandle,
&JobHandle);
- if (Status == 0xFFFFFFFF)
+ if (SaferStatus == 0xFFFFFFFF)
{
/* Back in 2003, they didn't have an NTSTATUS for this... */
DPRINT1("WinSafer blocking process launch\n");
@@ -3164,10 +3164,10 @@
}
/* Other status codes are not-Safer related, just convert them */
- if (!NT_SUCCESS(Status))
+ if (!NT_SUCCESS(SaferStatus))
{
- DPRINT1("Error checking WinSafer: %lx\n", Status);
- BaseSetLastNTError(Status);
+ DPRINT1("Error checking WinSafer: %lx\n", SaferStatus);
+ BaseSetLastNTError(SaferStatus);
Result = FALSE;
goto Quickie;
}
@@ -3576,7 +3576,7 @@
goto Quickie;
}
- /* Don't let callers pass in this flag -- we'll only get it from IFRO */
+ /* Don't let callers pass in this flag -- we'll only get it from IFEO */
Flags &= ~PROCESS_CREATE_FLAGS_LARGE_PAGES;
/* Clear the IFEO-missing flag, before we know for sure... */
@@ -3587,11 +3587,11 @@
(NtCurrentPeb()->ReadImageFileExecOptions))
{
/* Let's do this! Attempt to open IFEO */
- Status1 = LdrOpenImageFileOptionsKey(&PathName, 0, &KeyHandle);
- if (!NT_SUCCESS(Status1))
+ IFEOStatus = LdrOpenImageFileOptionsKey(&PathName, 0, &KeyHandle);
+ if (!NT_SUCCESS(IFEOStatus))
{
/* We failed, set the flag so we store this in the parameters */
- if (Status1 == STATUS_OBJECT_NAME_NOT_FOUND) ParameterFlags |= 2;
+ if (IFEOStatus == STATUS_OBJECT_NAME_NOT_FOUND) ParameterFlags |= 2;
}
else
{
@@ -3605,8 +3605,8 @@
if (!DebuggerCmdLine)
{
/* Close IFEO on failure */
- Status1 = NtClose(KeyHandle);
- ASSERT(NT_SUCCESS(Status1));
+ IFEOStatus = NtClose(KeyHandle);
+ ASSERT(NT_SUCCESS(IFEOStatus));
/* Fail the call */
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
@@ -3616,13 +3616,13 @@
}
/* Now query for the debugger */
- Status1 = LdrQueryImageFileKeyOption(KeyHandle,
+ IFEOStatus = LdrQueryImageFileKeyOption(KeyHandle,
L"Debugger",
REG_SZ,
DebuggerCmdLine,
MAX_PATH * sizeof(WCHAR),
&ResultSize);
- if (!(NT_SUCCESS(Status1)) ||
+ if (!(NT_SUCCESS(IFEOStatus)) ||
(ResultSize < sizeof(WCHAR)) ||
(DebuggerCmdLine[0] == UNICODE_NULL))
{
@@ -3632,21 +3632,21 @@
}
/* Also query if we should map with large pages */
- Status1 = LdrQueryImageFileKeyOption(KeyHandle,
+ IFEOStatus = LdrQueryImageFileKeyOption(KeyHandle,
L"UseLargePages",
REG_DWORD,
&UseLargePages,
sizeof(UseLargePages),
NULL);
- if ((NT_SUCCESS(Status1)) && (UseLargePages))
+ if ((NT_SUCCESS(IFEOStatus)) && (UseLargePages))
{
/* Do it! This is the only way this flag can be set */
Flags |= PROCESS_CREATE_FLAGS_LARGE_PAGES;
}
/* We're done with IFEO, can close it now */
- Status1 = NtClose(KeyHandle);
- ASSERT(NT_SUCCESS(Status1));
+ IFEOStatus = NtClose(KeyHandle);
+ ASSERT(NT_SUCCESS(IFEOStatus));
}
}