From bcb2613684fe74ca34d1286688620ed2c7ae844e Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Wed, 11 Apr 2018 00:05:41 +0200 Subject: [PATCH] [SDB][APPHELP] Add ShimVersionNT data tags + read them in SdbPackAppCompatData --- dll/appcompat/apphelp/hsdb.c | 24 +++++++++++++++++++++++- media/sdb/sysmain.xml | 9 +++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/dll/appcompat/apphelp/hsdb.c b/dll/appcompat/apphelp/hsdb.c index ddc501b5392..b450e30ac98 100644 --- a/dll/appcompat/apphelp/hsdb.c +++ b/dll/appcompat/apphelp/hsdb.c @@ -686,6 +686,7 @@ BOOL WINAPI SdbPackAppCompatData(HSDB hsdb, PSDBQUERYRESULT pQueryResult, PVOID* ShimData* pData; HRESULT hr; DWORD n; + BOOL bCloseDatabase = FALSE; if (!pQueryResult || !ppData || !pdwSize) { @@ -719,13 +720,34 @@ BOOL WINAPI SdbPackAppCompatData(HSDB hsdb, PSDBQUERYRESULT pQueryResult, PVOID* pData->Query.dwFlags, pData->dwMagic, pData->Query.atrExes[0], pData->Query.atrLayers[0]); /* Database List */ - /* 0x0 {GUID} NAME */ + /* 0x0 {GUID} NAME: Use to open HSDB */ + if (hsdb == NULL) + { + hsdb = SdbInitDatabase(HID_DOS_PATHS | SDB_DATABASE_MAIN_SHIM, NULL); + bCloseDatabase = TRUE; + } for (n = 0; n < pQueryResult->dwLayerCount; ++n) { + DWORD dwValue = 0, dwType; + DWORD dwValueSize = sizeof(dwValue); SHIM_INFO("Layer 0x%x\n", pQueryResult->atrLayers[n]); + + if (SdbQueryData(hsdb, pQueryResult->atrLayers[n], L"SHIMVERSIONNT", &dwType, &dwValue, &dwValueSize) == ERROR_SUCCESS && + dwType == REG_DWORD && dwValueSize == sizeof(dwValue)) + { + dwValue = (dwValue % 100) | ((dwValue / 100) << 8); + if (dwValue > pData->dwRosProcessCompatVersion) + pData->dwRosProcessCompatVersion = dwValue; + } } + if (pData->dwRosProcessCompatVersion) + SHIM_INFO("Setting ProcessCompatVersion 0x%x\n", pData->dwRosProcessCompatVersion); + + if (bCloseDatabase) + SdbReleaseDatabase(hsdb); + *ppData = pData; *pdwSize = pData->dwSize; diff --git a/media/sdb/sysmain.xml b/media/sdb/sysmain.xml index a27542e38e0..c451c28d500 100644 --- a/media/sdb/sysmain.xml +++ b/media/sdb/sysmain.xml @@ -283,38 +283,47 @@ + + + + + + + + +