Feel free to revert it,
I cannot look at this until at least tomorrow evening.

On 29 May 2017 at 12:06, Thomas Faber <thomas.fa...@reactos.org> wrote:
> Testbots seem to dislike this commit, looks like 3rd stage boot is
> broken in some way. :(
>
>
>
> On 2017-05-28 21:27, mjan...@svn.reactos.org wrote:
>>
>> Author: mjansen
>> Date: Sun May 28 19:27:51 2017
>> New Revision: 74693
>>
>> URL: http://svn.reactos.org/svn/reactos?rev=74693&view=rev
>> Log:
>> [KERNEL32] Initial implementation for BaseCheckRunApp, calling into
>> apphelp to check for compatibility fixes CORE-10368
>>
>> Modified:
>>      trunk/reactos/dll/win32/kernel32/client/appcache.c
>>      trunk/reactos/dll/win32/kernel32/client/utils.c
>>
>> Modified: trunk/reactos/dll/win32/kernel32/client/appcache.c
>> URL:
>> http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/appcache.c?rev=74693&r1=74692&r2=74693&view=diff
>>
>> ==============================================================================
>> --- trunk/reactos/dll/win32/kernel32/client/appcache.c  [iso-8859-1]
>> (original)
>> +++ trunk/reactos/dll/win32/kernel32/client/appcache.c  [iso-8859-1] Sun
>> May 28 19:27:51 2017
>> @@ -16,7 +16,20 @@
>>   /* GLOBALS
>> ********************************************************************/
>>     ULONG g_ShimsEnabled;
>> -
>> +static BOOL g_ApphelpInitialized = FALSE;
>> +static PVOID g_pApphelpCheckRunAppEx;
>> +static PVOID g_pSdbPackAppCompatData;
>> +
>> +typedef BOOL (WINAPI *tApphelpCheckRunAppEx)(HANDLE FileHandle, PVOID
>> Unk1, PVOID Unk2, PWCHAR ApplicationName, PVOID Environment, USHORT ExeType,
>> PULONG Reason,
>> +                                             PVOID*
>> SdbQueryAppCompatData, PULONG SdbQueryAppCompatDataSize, PVOID* SxsData,
>> PULONG SxsDataSize,
>> +                                             PULONG FusionFlags, PULONG64
>> SomeFlag1, PULONG SomeFlag2);
>> +typedef BOOL (WINAPI *tSdbPackAppCompatData)(PVOID hsdb, PVOID
>> pQueryResult, PVOID* ppData, DWORD *dwSize);
>> +
>> +#define APPHELP_VALID_RESULT        0x10000
>> +#define APPHELP_RESULT_NOTFOUND     0x20000
>> +#define APPHELP_RESULT_FOUND        0x40000
>> +
>> +
>>   /* FUNCTIONS
>> ******************************************************************/
>>     BOOLEAN
>> @@ -136,7 +149,120 @@
>>       DPRINT("BaseCheckAppcompatCache is UNIMPLEMENTED\n");
>>         if (Reason) *Reason = 0;
>> -    return TRUE;
>> +
>> +    // We don't know this app.
>> +    return FALSE;
>> +}
>> +
>> +static
>> +VOID
>> +BaseInitApphelp(VOID)
>> +{
>> +    WCHAR Buffer[MAX_PATH*2];
>> +    UNICODE_STRING DllPath = {0};
>> +    PVOID ApphelpAddress;
>> +    PVOID pApphelpCheckRunAppEx = NULL, pSdbPackAppCompatData = NULL;
>> +
>> +    RtlInitEmptyUnicodeString(&DllPath, Buffer, sizeof(Buffer));
>> +    RtlCopyUnicodeString(&DllPath, &BaseWindowsDirectory);
>> +    RtlAppendUnicodeToString(&DllPath, L"\\system32\\apphelp.dll");
>> +
>> +    if (NT_SUCCESS(LdrLoadDll(NULL, NULL, &DllPath, &ApphelpAddress)))
>> +    {
>> +        ANSI_STRING ProcName;
>> +
>> +        RtlInitAnsiString(&ProcName, "ApphelpCheckRunAppEx");
>> +        if (!NT_SUCCESS(LdrGetProcedureAddress(ApphelpAddress, &ProcName,
>> 0, &pApphelpCheckRunAppEx)))
>> +            pApphelpCheckRunAppEx = NULL;
>> +
>> +        RtlInitAnsiString(&ProcName, "SdbPackAppCompatData");
>> +        if (!NT_SUCCESS(LdrGetProcedureAddress(ApphelpAddress, &ProcName,
>> 0, &pSdbPackAppCompatData)))
>> +            pSdbPackAppCompatData = NULL;
>> +    }
>> +
>> +    if (InterlockedCompareExchangePointer(&g_pApphelpCheckRunAppEx,
>> RtlEncodeSystemPointer(pApphelpCheckRunAppEx), NULL) == NULL)
>> +    {
>> +        g_pSdbPackAppCompatData =
>> RtlEncodeSystemPointer(pSdbPackAppCompatData);
>> +    }
>> +}
>> +
>> +/*
>> + *
>> + */
>> +BOOL
>> +WINAPI
>> +BaseCheckRunApp(IN HANDLE FileHandle,
>> +                 IN PWCHAR ApplicationName,
>> +                 IN PWCHAR Environment,
>> +                 IN USHORT ExeType,
>> +                 IN PULONG pReason,
>> +                 IN PVOID* SdbQueryAppCompatData,
>> +                 IN PULONG SdbQueryAppCompatDataSize,
>> +                 IN PVOID* SxsData,
>> +                 IN PULONG SxsDataSize,
>> +                 OUT PULONG FusionFlags)
>> +{
>> +    ULONG Reason = 0;
>> +    ULONG64 Flags1 = 0;
>> +    ULONG Flags2 = 0;
>> +    BOOL Continue, NeedCleanup = FALSE;
>> +    tApphelpCheckRunAppEx pApphelpCheckRunAppEx;
>> +    tSdbPackAppCompatData pSdbPackAppCompatData;
>> +    PVOID QueryResult = NULL;
>> +    ULONG QueryResultSize = 0;
>> +
>> +    if (!g_ApphelpInitialized)
>> +    {
>> +        BaseInitApphelp();
>> +        g_ApphelpInitialized = TRUE;
>> +    }
>> +
>> +    pApphelpCheckRunAppEx =
>> RtlDecodeSystemPointer(g_pApphelpCheckRunAppEx);
>> +    pSdbPackAppCompatData =
>> RtlDecodeSystemPointer(g_pSdbPackAppCompatData);
>> +
>> +    if (!pApphelpCheckRunAppEx || !pSdbPackAppCompatData)
>> +        return TRUE;
>> +
>> +    if (pReason)
>> +        Reason = *pReason;
>> +
>> +    Continue = pApphelpCheckRunAppEx(FileHandle, NULL, NULL,
>> ApplicationName, Environment, ExeType, &Reason,
>> +        &QueryResult, &QueryResultSize, SxsData, SxsDataSize,
>> FusionFlags, &Flags1, &Flags2);
>> +
>> +    if (pReason)
>> +        *pReason = Reason;
>> +
>> +    if (Continue)
>> +    {
>> +        if ((Reason & (APPHELP_VALID_RESULT|APPHELP_RESULT_FOUND)) ==
>> (APPHELP_VALID_RESULT|APPHELP_RESULT_FOUND))
>> +        {
>> +            if (!pSdbPackAppCompatData(NULL, QueryResult,
>> SdbQueryAppCompatData, SdbQueryAppCompatDataSize))
>> +            {
>> +                DPRINT1("SdbPackAppCompatData returned a failure!\n");
>> +                NeedCleanup = TRUE;
>> +            }
>> +        }
>> +        else
>> +        {
>> +            NeedCleanup = TRUE;
>> +        }
>> +    }
>> +
>> +    if (QueryResult)
>> +        RtlFreeHeap(RtlGetProcessHeap(), 0, QueryResult);
>> +
>> +    if (NeedCleanup)
>> +    {
>> +        BasepFreeAppCompatData(*SdbQueryAppCompatData, *SxsData);
>> +        *SdbQueryAppCompatData = NULL;
>> +        if (SdbQueryAppCompatDataSize)
>> +            *SdbQueryAppCompatDataSize = 0;
>> +        *SxsData = NULL;
>> +        if (SxsDataSize)
>> +            *SxsDataSize = 0;
>> +    }
>> +
>> +    return Continue;
>>   }
>>     /*
>> @@ -171,9 +297,11 @@
>>                                        Environment,
>>                                        &Reason))
>>           {
>> -            /* We don't support this yet */
>> -            UNIMPLEMENTED;
>> -            Status = STATUS_ACCESS_DENIED;
>> +            if (!BaseCheckRunApp(FileHandle, ApplicationName,
>> Environment, ExeType, &Reason,
>> +                                SdbQueryAppCompatData,
>> SdbQueryAppCompatDataSize, SxsData, SxsDataSize, FusionFlags))
>> +            {
>> +                Status = STATUS_ACCESS_DENIED;
>> +            }
>>           }
>>       }
>>
>> Modified: trunk/reactos/dll/win32/kernel32/client/utils.c
>> URL:
>> http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/utils.c?rev=74693&r1=74692&r2=74693&view=diff
>>
>> ==============================================================================
>> --- trunk/reactos/dll/win32/kernel32/client/utils.c     [iso-8859-1]
>> (original)
>> +++ trunk/reactos/dll/win32/kernel32/client/utils.c     [iso-8859-1] Sun
>> May 28 19:27:51 2017
>> @@ -904,26 +904,6 @@
>>   /*
>>    * @unimplemented
>>    */
>> -BOOL
>> -WINAPI
>> -BaseCheckRunApp(IN DWORD Unknown1,
>> -                IN DWORD Unknown2,
>> -                IN DWORD Unknown3,
>> -                IN DWORD Unknown4,
>> -                IN DWORD Unknown5,
>> -                IN DWORD Unknown6,
>> -                IN DWORD Unknown7,
>> -                IN DWORD Unknown8,
>> -                IN DWORD Unknown9,
>> -                IN DWORD Unknown10)
>> -{
>> -    STUB;
>> -    return FALSE;
>> -}
>> -
>> -/*
>> - * @unimplemented
>> - */
>>   NTSTATUS
>>   WINAPI
>>   BasepCheckWinSaferRestrictions(IN HANDLE UserToken,
>>
>>
>
>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev@reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev

_______________________________________________
Ros-dev mailing list
Ros-dev@reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev

Reply via email to