Skip to content

Commit 2e60a3b

Browse files
Explicitly load system dlls from system directory.
1 parent 47669ad commit 2e60a3b

File tree

4 files changed

+55
-3
lines changed

4 files changed

+55
-3
lines changed

PresentMon/MainThread.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright 2017-2020 Intel Corporation
2+
Copyright 2017-2022 Intel Corporation
33
44
Permission is hereby granted, free of charge, to any person obtaining a copy of
55
this software and associated documentation files (the "Software"), to deal in
@@ -197,6 +197,13 @@ void ExitMainThread()
197197

198198
int main(int argc, char** argv)
199199
{
200+
// Load system DLLs
201+
LoadLibraryExA("advapi32.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
202+
LoadLibraryExA("shell32.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
203+
LoadLibraryExA("shlwapi.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
204+
LoadLibraryExA("tdh.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
205+
LoadLibraryExA("user32.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
206+
200207
// Parse command line arguments.
201208
if (!ParseCommandLine(argc, argv)) {
202209
return 1;

PresentMon/PresentMon.vcxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@
168168
<GenerateDebugInformation>true</GenerateDebugInformation>
169169
<AdditionalLibraryDirectories>..\build\obj\PresentData-$(Platform)-$(Configuration)</AdditionalLibraryDirectories>
170170
<AdditionalDependencies>advapi32.lib;shell32.lib;shlwapi.lib;tdh.lib;PresentData.lib;user32.lib</AdditionalDependencies>
171+
<DelayLoadDLLs>advapi32.dll;shell32.dll;shlwapi.dll;user32.dll;tdh.dll</DelayLoadDLLs>
171172
</Link>
172173
<Manifest />
173174
</ItemDefinitionGroup>
@@ -184,6 +185,7 @@
184185
<GenerateDebugInformation>true</GenerateDebugInformation>
185186
<AdditionalLibraryDirectories>..\build\obj\PresentData-$(Platform)-$(Configuration)</AdditionalLibraryDirectories>
186187
<AdditionalDependencies>advapi32.lib;shell32.lib;shlwapi.lib;tdh.lib;PresentData.lib;user32.lib</AdditionalDependencies>
188+
<DelayLoadDLLs>advapi32.dll;shell32.dll;shlwapi.dll;user32.dll;tdh.dll</DelayLoadDLLs>
187189
</Link>
188190
<Manifest />
189191
</ItemDefinitionGroup>
@@ -198,6 +200,7 @@
198200
<GenerateDebugInformation>true</GenerateDebugInformation>
199201
<AdditionalLibraryDirectories>..\build\obj\PresentData-$(Platform)-$(Configuration)</AdditionalLibraryDirectories>
200202
<AdditionalDependencies>advapi32.lib;shell32.lib;shlwapi.lib;tdh.lib;PresentData.lib;user32.lib</AdditionalDependencies>
203+
<DelayLoadDLLs>advapi32.dll;shell32.dll;shlwapi.dll;user32.dll;tdh.dll</DelayLoadDLLs>
201204
</Link>
202205
<Manifest />
203206
</ItemDefinitionGroup>
@@ -214,6 +217,7 @@
214217
<GenerateDebugInformation>true</GenerateDebugInformation>
215218
<AdditionalLibraryDirectories>..\build\obj\PresentData-$(Platform)-$(Configuration)</AdditionalLibraryDirectories>
216219
<AdditionalDependencies>advapi32.lib;shell32.lib;shlwapi.lib;tdh.lib;PresentData.lib;user32.lib</AdditionalDependencies>
220+
<DelayLoadDLLs>advapi32.dll;shell32.dll;shlwapi.dll;user32.dll;tdh.dll</DelayLoadDLLs>
217221
</Link>
218222
<Manifest />
219223
</ItemDefinitionGroup>
@@ -232,6 +236,7 @@
232236
<GenerateDebugInformation>true</GenerateDebugInformation>
233237
<AdditionalLibraryDirectories>..\build\obj\PresentData-$(Platform)-$(Configuration)</AdditionalLibraryDirectories>
234238
<AdditionalDependencies>advapi32.lib;shell32.lib;shlwapi.lib;tdh.lib;PresentData.lib;user32.lib</AdditionalDependencies>
239+
<DelayLoadDLLs>advapi32.dll;shell32.dll;shlwapi.dll;user32.dll;tdh.dll</DelayLoadDLLs>
235240
</Link>
236241
<Manifest />
237242
</ItemDefinitionGroup>
@@ -252,6 +257,7 @@
252257
<GenerateDebugInformation>true</GenerateDebugInformation>
253258
<AdditionalLibraryDirectories>..\build\obj\PresentData-$(Platform)-$(Configuration)</AdditionalLibraryDirectories>
254259
<AdditionalDependencies>advapi32.lib;shell32.lib;shlwapi.lib;tdh.lib;PresentData.lib;user32.lib</AdditionalDependencies>
260+
<DelayLoadDLLs>advapi32.dll;shell32.dll;shlwapi.dll;user32.dll;tdh.dll</DelayLoadDLLs>
255261
</Link>
256262
<Manifest />
257263
</ItemDefinitionGroup>
@@ -270,6 +276,7 @@
270276
<GenerateDebugInformation>true</GenerateDebugInformation>
271277
<AdditionalLibraryDirectories>..\build\obj\PresentData-$(Platform)-$(Configuration)</AdditionalLibraryDirectories>
272278
<AdditionalDependencies>advapi32.lib;shell32.lib;shlwapi.lib;tdh.lib;PresentData.lib;user32.lib</AdditionalDependencies>
279+
<DelayLoadDLLs>advapi32.dll;shell32.dll;shlwapi.dll;user32.dll;tdh.dll</DelayLoadDLLs>
273280
</Link>
274281
<Manifest />
275282
</ItemDefinitionGroup>
@@ -290,6 +297,7 @@
290297
<GenerateDebugInformation>true</GenerateDebugInformation>
291298
<AdditionalLibraryDirectories>..\build\obj\PresentData-$(Platform)-$(Configuration)</AdditionalLibraryDirectories>
292299
<AdditionalDependencies>advapi32.lib;shell32.lib;shlwapi.lib;tdh.lib;PresentData.lib;user32.lib</AdditionalDependencies>
300+
<DelayLoadDLLs>advapi32.dll;shell32.dll;shlwapi.dll;user32.dll;tdh.dll</DelayLoadDLLs>
293301
</Link>
294302
<Manifest />
295303
</ItemDefinitionGroup>

PresentMon/Privilege.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright 2017-2021 Intel Corporation
2+
Copyright 2017-2022 Intel Corporation
33
44
Permission is hereby granted, free of charge, to any person obtaining a copy of
55
this software and associated documentation files (the "Software"), to deal in
@@ -46,7 +46,7 @@ bool InPerfLogUsersGroup()
4646

4747
bool EnableDebugPrivilege()
4848
{
49-
auto hmodule = LoadLibraryA("advapi32.dll");
49+
auto hmodule = LoadLibraryExA("advapi32.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
5050
auto pOpenProcessToken = (decltype(&OpenProcessToken)) GetProcAddress(hmodule, "OpenProcessToken");
5151
auto pGetTokenInformation = (decltype(&GetTokenInformation)) GetProcAddress(hmodule, "GetTokenInformation");
5252
auto pLookupPrivilegeValue = (decltype(&LookupPrivilegeValueA)) GetProcAddress(hmodule, "LookupPrivilegeValueA");

Tools/run_tests.cmd

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ echo Checking generated files...
114114
for %%a in (%build_platforms%) do for %%b in (%build_configs%) do call :check_exist "build\%%b\PresentMon-%version%-%%a.exe"
115115
for %%a in (%build_platforms%) do for %%b in (%build_configs%) do call :check_exist "build\%%b\PresentMonTests-%version%-%%a.exe"
116116
for %%a in (%test_platforms%) do for %%b in (%build_configs%) do call :check_exist "build\%%b\etw_list-%version%-%%a.exe"
117+
for %%a in (%build_platforms%) do for %%b in (%build_configs%) do call :check_dlls_delayloaded "build\%%b\PresentMon-%version%-%%a.exe" %%a
117118
for %%a in (%test_platforms%) do for %%b in (%build_configs%) do call :check_pm_version "build\%%b\PresentMon-%version%-%%a.exe"
118119

119120
:: -----------------------------------------------------------------------------
@@ -156,6 +157,42 @@ exit /b 0
156157
)
157158
exit /b 0
158159

160+
:: -----------------------------------------------------------------------------
161+
:check_dlls_delayloaded
162+
if not exist "%programfiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" (
163+
echo error: missing dependency: vswhere.exe
164+
set /a errorcount=%errorcount%+1
165+
exit /b 1
166+
)
167+
set vsdir=
168+
for /f "tokens=*" %%a in ('"%programfiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -legacy -latest -property installationPath') do (
169+
set vsdir=%%a
170+
)
171+
if not exist "%vsdir%\VC\Tools\MSVC\14.29.30133\bin\Hostx64\%2\dumpbin.exe" (
172+
echo error: missing dependency: dumpbin.exe
173+
set /a errorcount=%errorcount%+1
174+
exit /b 1
175+
)
176+
set checkdll=0
177+
for /f "tokens=1,5" %%a in ('"%vsdir%\VC\Tools\MSVC\14.29.30133\bin\Hostx64\%2\dumpbin.exe" /dependents %~1') do (
178+
if "%%a"=="Image" (
179+
if "%%b"=="dependencies:" (
180+
call set checkdll=1
181+
) else (
182+
call set checkdll=0
183+
)
184+
)
185+
if "%%~xa"==".dll" (
186+
if !checkdll! equ 1 (
187+
if not "%%a"=="KERNEL32.dll" (
188+
echo error: dll dependency is not delay-loaded: %%a
189+
set /a errorcount=%errorcount%+1
190+
)
191+
)
192+
)
193+
)
194+
exit /b 0
195+
159196
:: -----------------------------------------------------------------------------
160197
:check_pm_version
161198
if not exist "%pmdir%\%~1" exit /b 0

0 commit comments

Comments
 (0)