mirror of
https://github.com/reactos/reactos.git
synced 2025-07-04 13:31:24 +00:00
[KERNEL32]
- Add brackets around "case XXX:" so that I'm able to (un)fold regions of code when debugging and reading. - Temporarily skip AppCompat functionality added by Alex, in order to "fix" (read: hack-fix) launch of .bat/.cmd files. Indeed, when .bat/.cmd files get started with the CreateProcess function, a call to NtCreateSection fails with status STATUS_INVALID_IMAGE_NOT_MZ, as expected (line 2952). But the new AppCompat code (lines 3028 and 3031-3033 and following, and 3114), executed whenever the status code from NtCreateSection is STATUS_SUCCESS or STATUS_INVALID_IMAGE_NOT_MZ or something else, overwrites the status code by other values, so that, after we return to the main code path (lines 3174 and following), the status code isn't STATUS_INVALID_IMAGE_NOT_MZ anymore but STATUS_SUCCESS or whatever, and then, we fail to run the .bat/.cmd file (that should be done at lines 3314-3316 and following). To Alex_Ionescu: Have a look at this and fix it properly!! svn path=/trunk/; revision=59855
This commit is contained in:
parent
0a425e697c
commit
c268c87586
1 changed files with 12 additions and 1 deletions
|
@ -2382,7 +2382,7 @@ CreateProcessInternalW(IN HANDLE hUserToken,
|
||||||
/* Zero out the initial core variables and handles */
|
/* Zero out the initial core variables and handles */
|
||||||
QuerySection = FALSE;
|
QuerySection = FALSE;
|
||||||
InJob = FALSE;
|
InJob = FALSE;
|
||||||
SkipSaferAndAppCompat = FALSE;
|
SkipSaferAndAppCompat = TRUE; // HACK for making .bat/.cmd launch working again.
|
||||||
ParameterFlags = 0;
|
ParameterFlags = 0;
|
||||||
Flags = 0;
|
Flags = 0;
|
||||||
DebugHandle = NULL;
|
DebugHandle = NULL;
|
||||||
|
@ -3174,6 +3174,7 @@ StartScan:
|
||||||
switch (Status)
|
switch (Status)
|
||||||
{
|
{
|
||||||
case STATUS_INVALID_IMAGE_WIN_16:
|
case STATUS_INVALID_IMAGE_WIN_16:
|
||||||
|
{
|
||||||
/* 16-bit binary. Should we use WOW or does the caller force VDM? */
|
/* 16-bit binary. Should we use WOW or does the caller force VDM? */
|
||||||
if (!(dwCreationFlags & CREATE_FORCEDOS))
|
if (!(dwCreationFlags & CREATE_FORCEDOS))
|
||||||
{
|
{
|
||||||
|
@ -3308,9 +3309,12 @@ StartScan:
|
||||||
}
|
}
|
||||||
|
|
||||||
// There is no break here on purpose, so FORCEDOS drops down!
|
// There is no break here on purpose, so FORCEDOS drops down!
|
||||||
|
}
|
||||||
|
|
||||||
case STATUS_INVALID_IMAGE_PROTECT:
|
case STATUS_INVALID_IMAGE_PROTECT:
|
||||||
case STATUS_INVALID_IMAGE_NOT_MZ:
|
case STATUS_INVALID_IMAGE_NOT_MZ:
|
||||||
case STATUS_INVALID_IMAGE_NE_FORMAT:
|
case STATUS_INVALID_IMAGE_NE_FORMAT:
|
||||||
|
{
|
||||||
/* We're launching an executable application */
|
/* We're launching an executable application */
|
||||||
BinarySubType = BINARY_TYPE_EXE;
|
BinarySubType = BINARY_TYPE_EXE;
|
||||||
|
|
||||||
|
@ -3493,21 +3497,27 @@ StartScan:
|
||||||
/* We've already done all these checks, don't do them again */
|
/* We've already done all these checks, don't do them again */
|
||||||
SkipSaferAndAppCompat = TRUE;
|
SkipSaferAndAppCompat = TRUE;
|
||||||
goto AppNameRetry;
|
goto AppNameRetry;
|
||||||
|
}
|
||||||
|
|
||||||
case STATUS_INVALID_IMAGE_WIN_64:
|
case STATUS_INVALID_IMAGE_WIN_64:
|
||||||
|
{
|
||||||
/* 64-bit binaries are not allowed to run on 32-bit ReactOS */
|
/* 64-bit binaries are not allowed to run on 32-bit ReactOS */
|
||||||
DPRINT1("64-bit binary, failing\n");
|
DPRINT1("64-bit binary, failing\n");
|
||||||
SetLastError(ERROR_EXE_MACHINE_TYPE_MISMATCH);
|
SetLastError(ERROR_EXE_MACHINE_TYPE_MISMATCH);
|
||||||
Result = FALSE;
|
Result = FALSE;
|
||||||
goto Quickie;
|
goto Quickie;
|
||||||
|
}
|
||||||
|
|
||||||
case STATUS_FILE_IS_OFFLINE:
|
case STATUS_FILE_IS_OFFLINE:
|
||||||
|
{
|
||||||
/* Set the correct last error for this */
|
/* Set the correct last error for this */
|
||||||
DPRINT1("File is offline, failing\n");
|
DPRINT1("File is offline, failing\n");
|
||||||
SetLastError(ERROR_FILE_OFFLINE);
|
SetLastError(ERROR_FILE_OFFLINE);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
{
|
||||||
/* Any other error, convert it to a generic Win32 error */
|
/* Any other error, convert it to a generic Win32 error */
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -3521,6 +3531,7 @@ StartScan:
|
||||||
ASSERT(Status == STATUS_SUCCESS);
|
ASSERT(Status == STATUS_SUCCESS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Is this not a WOW application, but a WOW32 VDM was requested for it? */
|
/* Is this not a WOW application, but a WOW32 VDM was requested for it? */
|
||||||
if (!(IsWowApp) && (dwCreationFlags & CREATE_SEPARATE_WOW_VDM))
|
if (!(IsWowApp) && (dwCreationFlags & CREATE_SEPARATE_WOW_VDM))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue