Author: mjansen Date: Sun Jul 16 13:56:08 2017 New Revision: 75359
URL: http://svn.reactos.org/svn/reactos?rev=75359&view=rev Log: [SHIMENG] Pass shim commandline to shims. CORE-11329
Modified: trunk/reactos/dll/appcompat/apphelp/shimeng.c
Modified: trunk/reactos/dll/appcompat/apphelp/shimeng.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/shime... ============================================================================== --- trunk/reactos/dll/appcompat/apphelp/shimeng.c [iso-8859-1] (original) +++ trunk/reactos/dll/appcompat/apphelp/shimeng.c [iso-8859-1] Sun Jul 16 13:56:08 2017 @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 Mark Jansen + * Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -790,13 +790,13 @@ TAGID ShimRef; if (SdbTagRefToTagID(hsdb, Data[n], &pdb, &ShimRef)) { - LPCWSTR ShimName, DllName; + LPCWSTR ShimName, DllName, CommandLine = NULL; TAGID ShimTag; WCHAR FullNameBuffer[MAX_PATH]; UNICODE_STRING UnicodeDllName; PVOID BaseAddress; PSHIMMODULE pShimInfo = NULL; - const char* szCommandLine = ""; + ANSI_STRING AnsiCommandLine = RTL_CONSTANT_STRING(""); PHOOKAPIEX pHookApi; DWORD dwHookCount;
@@ -805,6 +805,21 @@ { SHIMENG_FAIL("Failed to retrieve the name for 0x%x\n", Data[n]); continue; + } + + CommandLine = SeiGetStringPtr(pdb, ShimRef, TAG_COMMAND_LINE); + if (CommandLine && *CommandLine) + { + RtlInitUnicodeString(&UnicodeDllName, CommandLine); + if (NT_SUCCESS(RtlUnicodeStringToAnsiString(&AnsiCommandLine, &UnicodeDllName, TRUE))) + { + SHIMENG_INFO("COMMAND LINE %s for %S", AnsiCommandLine.Buffer, ShimName); + } + else + { + AnsiCommandLine.Buffer = ""; + CommandLine = NULL; + } }
ShimTag = SeiGetDWORD(pdb, ShimRef, TAG_SHIM_TAGID); @@ -828,11 +843,6 @@ SHIMENG_WARN("Failed to build a full path for %S\n", ShimName); continue; } - - /* TODO: - SeiGetShimCommandLine(); - [SeiInit] COMMAND_LINE VirtualRegistry(WINNT;VistaRTMLie) from AcLayers.DLL - */
RtlInitUnicodeString(&UnicodeDllName, FullNameBuffer); if (NT_SUCCESS(LdrGetDllHandle(NULL, NULL, &UnicodeDllName, &BaseAddress))) @@ -857,11 +867,13 @@ SHIMENG_INFO("Shim DLL 0x%p "%wZ" loaded\n", BaseAddress, &UnicodeDllName); SHIMENG_INFO("Using SHIM "%S!%S"\n", DllName, ShimName);
- - pHookApi = pShimInfo->pGetHookAPIs(szCommandLine, ShimName, &dwHookCount); + pHookApi = pShimInfo->pGetHookAPIs(AnsiCommandLine.Buffer, ShimName, &dwHookCount); SHIMENG_INFO("GetHookAPIs returns %d hooks for DLL "%wZ" SHIM "%S"\n", dwHookCount, &UnicodeDllName, ShimName); if (dwHookCount) SeiAppendHookInfo(pShimInfo, pHookApi, dwHookCount); + + if (CommandLine && *CommandLine) + RtlFreeAnsiString(&AnsiCommandLine);
dwTotalHooks += dwHookCount; /*SeiBuildInclExclList*/