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 @@
+
+
+
+
+
+
+
+
+