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/shim…
==============================================================================
--- 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(a)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*/