[APPCOMPAT] Various fixes.

- Simplify shimdbg output as suggested by Thomas
- Simplify media/sdb/sysmain.xml
- Fix some warnings + a debug print

svn path=/trunk/; revision=75340
This commit is contained in:
Mark Jansen 2017-07-14 19:29:34 +00:00
parent eb6e21dd58
commit ae49e29351
4 changed files with 57 additions and 105 deletions

View file

@ -577,7 +577,7 @@ BOOL WINAPI SdbGetAppPatchDir(HSDB db, LPWSTR path, DWORD size)
if (!default_dir) if (!default_dir)
{ {
WCHAR* tmp = NULL; WCHAR* tmp;
UINT len = GetSystemWindowsDirectoryW(NULL, 0) + lstrlenW(szAppPatch); UINT len = GetSystemWindowsDirectoryW(NULL, 0) + lstrlenW(szAppPatch);
tmp = SdbAlloc((len + 1)* sizeof(WCHAR)); tmp = SdbAlloc((len + 1)* sizeof(WCHAR));
if (tmp) if (tmp)
@ -706,7 +706,7 @@ BOOL WINAPI SdbPackAppCompatData(HSDB hsdb, PSDBQUERYRESULT pQueryResult, PVOID*
pData->unknown = 0; pData->unknown = 0;
pData->szLayer[0] = UNICODE_NULL; /* TODO */ pData->szLayer[0] = UNICODE_NULL; /* TODO */
SHIM_INFO("\ndwFlags 0x%x\ndwMagic 0x%x\ntrExe 0x%x\ntrLayer 0x%x", SHIM_INFO("\ndwFlags 0x%x\ndwMagic 0x%x\ntrExe 0x%x\ntrLayer 0x%x\n",
pData->Query.dwFlags, pData->dwMagic, pData->Query.atrExes[0], pData->Query.atrLayers[0]); pData->Query.dwFlags, pData->dwMagic, pData->Query.atrExes[0], pData->Query.atrLayers[0]);
/* Database List */ /* Database List */

View file

@ -159,7 +159,7 @@ BOOL SdbpBuildSignMediaId(PSDB_TMP_STR LongPath)
FindClose(FindHandle); FindClose(FindHandle);
SdbpResizeTempStr(LongPath, (LongPath->Str.Length >> 1) + 20); SdbpResizeTempStr(LongPath, (LongPath->Str.Length >> 1) + 20);
StringCbPrintfW(LongPath->Str.Buffer, LongPath->Str.MaximumLength, SIGN_MEDIA_FMT, SignMedia, Scratch.Str.Buffer + 3); StringCbPrintfW(LongPath->Str.Buffer, LongPath->Str.MaximumLength, SIGN_MEDIA_FMT, SignMedia, Scratch.Str.Buffer + 3);
LongPath->Str.Length = wcslen(LongPath->Str.Buffer) * sizeof(WCHAR); LongPath->Str.Length = (USHORT)wcslen(LongPath->Str.Buffer) * sizeof(WCHAR);
SdbpFreeTempStr(&Scratch); SdbpFreeTempStr(&Scratch);
return TRUE; return TRUE;
} }
@ -217,7 +217,7 @@ NTSTATUS SdbpOpenKey(PUNICODE_STRING FullPath, BOOL bMachine, ACCESS_MASK Access
return Status; return Status;
} }
} }
FullPath->MaximumLength = BasePath.Length + (wcslen(LayersKey) + 1) * sizeof(WCHAR); FullPath->MaximumLength = (USHORT)(BasePath.Length + (wcslen(LayersKey) + 1) * sizeof(WCHAR));
FullPath->Buffer = SdbAlloc(FullPath->MaximumLength); FullPath->Buffer = SdbAlloc(FullPath->MaximumLength);
FullPath->Length = 0; FullPath->Length = 0;
RtlAppendUnicodeStringToString(FullPath, &BasePath); RtlAppendUnicodeStringToString(FullPath, &BasePath);

View file

@ -7,224 +7,183 @@
<!-- Version lie shims --> <!-- Version lie shims -->
<SHIM> <SHIM NAME="Win95VersionLie">
<NAME>Win95VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Win98VersionLie">
<NAME>Win98VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="WinNT4SP5VersionLie">
<NAME>WinNT4SP5VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Win2000VersionLie">
<NAME>Win2000VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Win2000SP1VersionLie">
<NAME>Win2000SP1VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Win2000SP2VersionLie">
<NAME>Win2000SP2VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Win2000SP3VersionLie">
<NAME>Win2000SP3VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="WinXPVersionLie">
<NAME>WinXPVersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="WinXPSP1VersionLie">
<NAME>WinXPSP1VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="WinXPSP2VersionLie">
<NAME>WinXPSP2VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="WinXPSP3VersionLie">
<NAME>WinXPSP3VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Win2k3RTMVersionLie">
<NAME>Win2k3RTMVersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Win2k3SP1VersionLie">
<NAME>Win2k3SP1VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Win2k3SP2VersionLie">
<NAME>Win2k3SP2VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="VistaRTMVersionLie">
<NAME>VistaRTMVersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="VistaSP1VersionLie">
<NAME>VistaSP1VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="VistaSP2VersionLie">
<NAME>VistaSP2VersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Win7RTMVersionLie">
<NAME>Win7RTMVersionLie</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<!-- Display mode shims --> <!-- Display mode shims -->
<SHIM> <SHIM NAME="Force640x480">
<NAME>Force640x480</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM> <SHIM NAME="Force8BitColor">
<NAME>Force8BitColor</NAME>
<DLLFILE>aclayers.dll</DLLFILE> <DLLFILE>aclayers.dll</DLLFILE>
</SHIM> </SHIM>
<!-- misc shims --> <!-- misc shims -->
<SHIM> <SHIM NAME="DisableThemes">
<NAME>DisableThemes</NAME>
<DLLFILE>acgenral.dll</DLLFILE> <DLLFILE>acgenral.dll</DLLFILE>
</SHIM> </SHIM>
<SHIM NAME="HideShimEnv">
<DLLFILE>aclayers.dll</DLLFILE>
</SHIM>
</LIBRARY> </LIBRARY>
<!-- Backwards compatibility layers, incomplete! --> <!-- Backwards compatibility layers, incomplete! -->
<LAYER> <LAYER NAME="WIN95">
<NAME>WIN95</NAME>
<SHIM_REF NAME="Win95VersionLie" /> <SHIM_REF NAME="Win95VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WIN98">
<NAME>WIN98</NAME>
<SHIM_REF NAME="Win98VersionLie" /> <SHIM_REF NAME="Win98VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="NT4SP5">
<NAME>NT4SP5</NAME>
<SHIM_REF NAME="WinNT4SP5VersionLie" /> <SHIM_REF NAME="WinNT4SP5VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WIN2000">
<NAME>WIN2000</NAME>
<SHIM_REF NAME="Win2000VersionLie" /> <SHIM_REF NAME="Win2000VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WIN2000SP1">
<NAME>WIN2000SP1</NAME>
<SHIM_REF NAME="Win2000SP1VersionLie" /> <SHIM_REF NAME="Win2000SP1VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WIN2000SP2">
<NAME>WIN2000SP2</NAME>
<SHIM_REF NAME="Win2000SP2VersionLie" /> <SHIM_REF NAME="Win2000SP2VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WIN2000SP3">
<NAME>WIN2000SP3</NAME>
<SHIM_REF NAME="Win2000SP3VersionLie" /> <SHIM_REF NAME="Win2000SP3VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINXP">
<NAME>WINXP</NAME>
<SHIM_REF NAME="WinXPVersionLie" /> <SHIM_REF NAME="WinXPVersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINXPSP1">
<NAME>WINXPSP1</NAME>
<SHIM_REF NAME="WinXPSP1VersionLie" /> <SHIM_REF NAME="WinXPSP1VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINXPSP2">
<NAME>WINXPSP2</NAME>
<SHIM_REF NAME="WinXPSP2VersionLie" /> <SHIM_REF NAME="WinXPSP2VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINXPSP3">
<NAME>WINXPSP3</NAME>
<SHIM_REF NAME="WinXPSP3VersionLie" /> <SHIM_REF NAME="WinXPSP3VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINSRV03RTM">
<NAME>WINSRV03RTM</NAME>
<SHIM_REF NAME="Win2k3RTMVersionLie" /> <SHIM_REF NAME="Win2k3RTMVersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINSRV03SP1">
<NAME>WINSRV03SP1</NAME>
<SHIM_REF NAME="Win2k3SP1VersionLie" /> <SHIM_REF NAME="Win2k3SP1VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINSRV03SP2">
<NAME>WINSRV03SP2</NAME>
<SHIM_REF NAME="Win2k3SP2VersionLie" /> <SHIM_REF NAME="Win2k3SP2VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="VISTARTM">
<NAME>VISTARTM</NAME>
<SHIM_REF NAME="VistaRTMVersionLie" /> <SHIM_REF NAME="VistaRTMVersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="VISTASP1">
<NAME>VISTASP1</NAME>
<SHIM_REF NAME="VistaSP1VersionLie" /> <SHIM_REF NAME="VistaSP1VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="VISTASP2">
<NAME>VISTASP2</NAME>
<SHIM_REF NAME="VistaSP2VersionLie" /> <SHIM_REF NAME="VistaSP2VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINSRV08">
<NAME>WINSRV08</NAME>
<SHIM_REF NAME="VistaRTMVersionLie" /> <SHIM_REF NAME="VistaRTMVersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINSRV08SP1">
<NAME>WINSRV08SP1</NAME>
<SHIM_REF NAME="VistaSP1VersionLie" /> <SHIM_REF NAME="VistaSP1VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WINSRV08SP2">
<NAME>WINSRV08SP2</NAME>
<SHIM_REF NAME="VistaSP2VersionLie" /> <SHIM_REF NAME="VistaSP2VersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<LAYER> <LAYER NAME="WIN7RTM">
<NAME>WIN7RTM</NAME>
<SHIM_REF NAME="Win7RTMVersionLie" /> <SHIM_REF NAME="Win7RTMVersionLie" />
<!-- TODO: Add more fixes! --> <!-- TODO: Add more fixes! -->
</LAYER> </LAYER>
<!-- Display mode layers --> <!-- Display mode layers -->
<LAYER> <LAYER NAME="256Color">
<NAME>256Color</NAME>
<SHIM_REF NAME="DisableThemes" /> <SHIM_REF NAME="DisableThemes" />
<SHIM_REF NAME="Force8BitColor" /> <SHIM_REF NAME="Force8BitColor" />
</LAYER> </LAYER>
<LAYER> <LAYER NAME="640X480">
<NAME>640X480</NAME>
<SHIM_REF NAME="Force640x480" /> <SHIM_REF NAME="Force640x480" />
</LAYER> </LAYER>
<!-- misc layers --> <!-- misc layers -->
<LAYER> <LAYER NAME="DisableThemes">
<NAME>DisableThemes</NAME>
<SHIM_REF NAME="DisableThemes" /> <SHIM_REF NAME="DisableThemes" />
</LAYER> </LAYER>

View file

@ -10,23 +10,16 @@
#include <ctype.h> #include <ctype.h>
#include <ntndk.h> #include <ntndk.h>
void __stdcall OutputDebugStringA(PCSTR); NTSYSAPI ULONG NTAPI vDbgPrintEx(_In_ ULONG ComponentId, _In_ ULONG Level, _In_z_ PCCH Format, _In_ va_list ap);
#define DPFLTR_ERROR_LEVEL 0
void xprintf(const char *fmt, ...) void xprintf(const char *fmt, ...)
{ {
va_list ap; va_list ap;
int length;
char *buf;
va_start(ap, fmt); va_start(ap, fmt);
length = _vscprintf(fmt, ap); vprintf(fmt, ap);
buf = malloc(length + 1); vDbgPrintEx(-1, DPFLTR_ERROR_LEVEL, fmt, ap);
vsprintf(buf, fmt, ap);
buf[length] = '\0';
va_end(ap);
fputs(buf, stdout);
OutputDebugStringA(buf);
} }