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