/*
- * 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
#define WIN32_NO_STATUS
#include "windows.h"
#include "ntndk.h"
+#define IN_APPHELP
#include "shimlib.h"
#include <strsafe.h>
/* Make sure we don't include apphelp logging */
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;
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);
if (!ShimTag)
{
continue;
}
- /* TODO:
- SeiGetShimCommandLine();
- [SeiInit] COMMAND_LINE VirtualRegistry(WINNT;VistaRTMLie) from AcLayers.DLL
- */
-
RtlInitUnicodeString(&UnicodeDllName, FullNameBuffer);
if (NT_SUCCESS(LdrGetDllHandle(NULL, NULL, &UnicodeDllName, &BaseAddress)))
{
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*/
}