[ros-dev] [ros-diffs] [tfaber] 66365: [KERNEL32] - Make BaseSetLastNTError return the converted Win32 error code. This will determine the upper 24 bits of EAX in functions that return BOOLEAN FALSE right after calling B...

Timo Kreuzer timo.kreuzer at web.de
Fri Feb 20 23:17:25 UTC 2015


For me this looks like a hack. It might "do what Windows does", but the 
result is more based on luck / random compiler behaviour rather than 
deterministic behavior. We should think about returning a full ULONG in 
all functions that rely on this (like Wow64EnableWow64FsRedirection), 
containing the correct value, rather than relying on random stuff.


Am 20.02.2015 um 08:03 schrieb tfaber at svn.reactos.org:
> Author: tfaber
> Date: Fri Feb 20 07:03:00 2015
> New Revision: 66365
>
> URL: http://svn.reactos.org/svn/reactos?rev=66365&view=rev
> Log:
> [KERNEL32]
> - Make BaseSetLastNTError return the converted Win32 error code. This will determine the upper 24 bits of EAX in functions that return BOOLEAN FALSE right after calling BaseSetLastNTError, e.g. Wow64EnableWow64FsRedirection. Fixes installers using WiX Toolset (e.g. VS2012 redist) on MSVC builds.
> See http://wixtoolset.org/issues/4681/ for the WiX bug that causes this.
> CORE-8010
>
> Modified:
>      trunk/reactos/dll/win32/kernel32/client/except.c
>      trunk/reactos/dll/win32/kernel32/include/kernel32.h
>
> Modified: trunk/reactos/dll/win32/kernel32/client/except.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/except.c?rev=66365&r1=66364&r2=66365&view=diff
> ==============================================================================
> --- trunk/reactos/dll/win32/kernel32/client/except.c	[iso-8859-1] (original)
> +++ trunk/reactos/dll/win32/kernel32/client/except.c	[iso-8859-1] Fri Feb 20 07:03:00 2015
> @@ -682,12 +682,16 @@
>   /*
>    * @implemented
>    */
> -VOID
> +DWORD
>   WINAPI
>   BaseSetLastNTError(IN NTSTATUS Status)
>   {
> +    DWORD dwErrCode;
> +
>       /* Convert from NT to Win32, then set */
> -    SetLastError(RtlNtStatusToDosError(Status));
> +    dwErrCode = RtlNtStatusToDosError(Status);
> +    SetLastError(dwErrCode);
> +    return dwErrCode;
>   }
>   
>   /*
>
> Modified: trunk/reactos/dll/win32/kernel32/include/kernel32.h
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/include/kernel32.h?rev=66365&r1=66364&r2=66365&view=diff
> ==============================================================================
> --- trunk/reactos/dll/win32/kernel32/include/kernel32.h	[iso-8859-1] (original)
> +++ trunk/reactos/dll/win32/kernel32/include/kernel32.h	[iso-8859-1] Fri Feb 20 07:03:00 2015
> @@ -353,7 +353,7 @@
>   WINAPI
>   InitCommandLines(VOID);
>   
> -VOID
> +DWORD
>   WINAPI
>   BaseSetLastNTError(IN NTSTATUS Status);
>   
>
>
>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3683 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://www.reactos.org/pipermail/ros-dev/attachments/20150221/da15d62d/attachment-0001.bin>


More information about the Ros-dev mailing list