Skip to content
This repository was archived by the owner on Jan 4, 2025. It is now read-only.

Commit 91dc373

Browse files
committed
add windbg workaround
1 parent 397aa55 commit 91dc373

11 files changed

+789
-5
lines changed

Common/framework.h

-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
#pragma comment(lib, "version.lib")
3535

3636
#pragma comment(lib, "delayimp.lib")
37-
#pragma comment(lib, "DbgHelp.lib")
3837
#pragma comment(lib, "Imagehlp.lib")
3938
#pragma comment(lib, "Psapi.lib")
4039

TFMain/Application.cpp

+23
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ HRESULT Application::InstallApp() try
141141
using namespace wil;
142142
using namespace TranslucentFlyouts;
143143

144+
THROW_IF_FAILED(
145+
CopyFile2(
146+
Utils::make_current_folder_file_str(L"dbghelp-for-tf.dll").c_str(),
147+
(wil::GetSystemDirectoryW<std::wstring>() + L"\\dbghelp-for-tf.dll").c_str(),
148+
nullptr
149+
)
150+
);
151+
144152
HRESULT hr{ S_OK };
145153
auto CleanUp{ Utils::RoInit(&hr) };
146154
THROW_IF_FAILED(hr);
@@ -304,6 +312,21 @@ HRESULT Application::UninstallApp() try
304312
);
305313
#endif // _WIN64
306314
}
315+
316+
if (
317+
!DeleteFileW(
318+
(wil::GetSystemDirectoryW<std::wstring>() + L"\\dbghelp-for-tf.dll").c_str()
319+
)
320+
)
321+
{
322+
THROW_IF_WIN32_BOOL_FALSE(
323+
MoveFileExW(
324+
(wil::GetSystemDirectoryW<std::wstring>() + L"\\dbghelp-for-tf.dll").c_str(),
325+
nullptr,
326+
MOVEFILE_DELAY_UNTIL_REBOOT
327+
)
328+
);
329+
}
307330
{
308331
com_ptr<ITaskService> taskService{ wil::CoCreateInstance<ITaskService>(CLSID_TaskScheduler) };
309332
THROW_IF_FAILED(taskService->Connect(_variant_t{}, _variant_t{}, _variant_t{}, _variant_t{}));

TFMain/TFMain.vcxproj

+8-4
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@
119119
<SubSystem>Windows</SubSystem>
120120
<GenerateDebugInformation>true</GenerateDebugInformation>
121121
<ModuleDefinitionFile>GlobalFunctions.def</ModuleDefinitionFile>
122-
<AdditionalLibraryDirectories>$(SolutionDir)Build\$(PlatformShortName)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
122+
<AdditionalLibraryDirectories>$(SolutionDir)Build\$(PlatformShortName)\$(Configuration)\;$(SolutionDir)Build\import\$(PlatformShortName)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
123+
<AdditionalDependencies>dbghelp-for-tf.lib;%(AdditionalDependencies)</AdditionalDependencies>
123124
</Link>
124125
</ItemDefinitionGroup>
125126
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -146,7 +147,8 @@
146147
<OptimizeReferences>true</OptimizeReferences>
147148
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
148149
<ModuleDefinitionFile>GlobalFunctions.def</ModuleDefinitionFile>
149-
<AdditionalLibraryDirectories>$(SolutionDir)Build\$(PlatformShortName)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
150+
<AdditionalLibraryDirectories>$(SolutionDir)Build\$(PlatformShortName)\$(Configuration)\;$(SolutionDir)Build\import\$(PlatformShortName)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
151+
<AdditionalDependencies>dbghelp-for-tf.lib;%(AdditionalDependencies)</AdditionalDependencies>
150152
</Link>
151153
</ItemDefinitionGroup>
152154
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -163,7 +165,8 @@
163165
<SubSystem>Windows</SubSystem>
164166
<GenerateDebugInformation>true</GenerateDebugInformation>
165167
<ModuleDefinitionFile>GlobalFunctions.def</ModuleDefinitionFile>
166-
<AdditionalLibraryDirectories>$(SolutionDir)Build\$(PlatformShortName)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
168+
<AdditionalLibraryDirectories>$(SolutionDir)Build\$(PlatformShortName)\$(Configuration)\;$(SolutionDir)Build\import\$(PlatformShortName)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
169+
<AdditionalDependencies>dbghelp-for-tf.lib;%(AdditionalDependencies)</AdditionalDependencies>
167170
</Link>
168171
</ItemDefinitionGroup>
169172
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -190,7 +193,8 @@
190193
<OptimizeReferences>true</OptimizeReferences>
191194
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
192195
<ModuleDefinitionFile>GlobalFunctions.def</ModuleDefinitionFile>
193-
<AdditionalLibraryDirectories>$(SolutionDir)Build\$(PlatformShortName)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
196+
<AdditionalLibraryDirectories>$(SolutionDir)Build\$(PlatformShortName)\$(Configuration)\;$(SolutionDir)Build\import\$(PlatformShortName)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
197+
<AdditionalDependencies>dbghelp-for-tf.lib;%(AdditionalDependencies)</AdditionalDependencies>
194198
</Link>
195199
</ItemDefinitionGroup>
196200
<ItemGroup>

TranslucentFlyouts.sln

+10
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Common\Common.vcx
99
EndProject
1010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TFModern", "TFModern\TFModern.vcxproj", "{F79B986C-C960-40AB-B0B2-4D6EA009BC15}"
1111
EndProject
12+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "windbg-workaround", "windbg-workaround\windbg-workaround.vcxproj", "{D01FD141-31B8-4CCE-87E6-519376469608}"
13+
EndProject
1214
Global
1315
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1416
Debug|x64 = Debug|x64
@@ -33,6 +35,14 @@ Global
3335
{F79B986C-C960-40AB-B0B2-4D6EA009BC15}.Release|x64.Build.0 = Release|x64
3436
{F79B986C-C960-40AB-B0B2-4D6EA009BC15}.Release|x86.ActiveCfg = Release|Win32
3537
{F79B986C-C960-40AB-B0B2-4D6EA009BC15}.Release|x86.Build.0 = Release|Win32
38+
{D01FD141-31B8-4CCE-87E6-519376469608}.Debug|x64.ActiveCfg = Debug|x64
39+
{D01FD141-31B8-4CCE-87E6-519376469608}.Debug|x64.Build.0 = Debug|x64
40+
{D01FD141-31B8-4CCE-87E6-519376469608}.Debug|x86.ActiveCfg = Debug|Win32
41+
{D01FD141-31B8-4CCE-87E6-519376469608}.Debug|x86.Build.0 = Debug|Win32
42+
{D01FD141-31B8-4CCE-87E6-519376469608}.Release|x64.ActiveCfg = Release|x64
43+
{D01FD141-31B8-4CCE-87E6-519376469608}.Release|x64.Build.0 = Release|x64
44+
{D01FD141-31B8-4CCE-87E6-519376469608}.Release|x86.ActiveCfg = Release|Win32
45+
{D01FD141-31B8-4CCE-87E6-519376469608}.Release|x86.Build.0 = Release|Win32
3646
EndGlobalSection
3747
GlobalSection(SolutionProperties) = preSolution
3848
HideSolutionNode = FALSE

windbg-workaround/GlobalFunctions.def

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
LIBRARY
2+
EXPORTS
3+
SymInitialize
4+
SymSetOptions
5+
SymRegisterCallbackW64
6+
SymSetSearchPathW
7+
SymCleanup
8+
SymUnloadModule64
9+
SymGetSymbolFileW
10+
SymLoadModuleExW
11+
SymEnumSymbols
12+
ImageDirectoryEntryToData
13+
MiniDumpWriteDump
14+
UnDecorateSymbolName

windbg-workaround/pch.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// pch.cpp: 与预编译标头对应的源文件
2+
3+
#include "pch.h"
4+
5+
// 当使用预编译的头时,需要使用此源文件,编译才能成功。

windbg-workaround/pch.h

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#ifndef PCH_H
2+
#define PCH_H
3+
4+
#define _IMAGEHLP_SOURCE_
5+
#include <Windows.h>
6+
#include <ImageHlp.h>
7+
8+
#endif
+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
// windbg-workaround.cpp : 定义 DLL 的导出函数。
2+
//
3+
4+
#include "pch.h"
5+
#pragma warning(disable : 6101)
6+
#pragma warning(disable : 6054)
7+
#pragma warning(disable : 6387)
8+
9+
extern "C" BOOL IMAGEAPI SymInitialize(
10+
_In_ HANDLE hProcess,
11+
_In_opt_ PCSTR UserSearchPath,
12+
_In_ BOOL fInvadeProcess
13+
)
14+
{
15+
return TRUE;
16+
}
17+
extern "C" DWORD IMAGEAPI SymSetOptions(
18+
_In_ DWORD SymOptions
19+
)
20+
{
21+
return 0;
22+
}
23+
extern "C" BOOL IMAGEAPI SymRegisterCallbackW64(
24+
_In_ HANDLE hProcess,
25+
_In_ PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,
26+
_In_ ULONG64 UserContext
27+
)
28+
{
29+
return TRUE;
30+
}
31+
extern "C" BOOL IMAGEAPI SymSetSearchPathW(
32+
_In_ HANDLE hProcess,
33+
_In_opt_ PCWSTR SearchPath
34+
)
35+
{
36+
return TRUE;
37+
}
38+
extern "C" BOOL IMAGEAPI SymCleanup(
39+
_In_ HANDLE hProcess
40+
)
41+
{
42+
return TRUE;
43+
}
44+
extern "C" BOOL IMAGEAPI SymUnloadModule64(
45+
_In_ HANDLE hProcess,
46+
_In_ DWORD64 BaseOfDll
47+
)
48+
{
49+
return TRUE;
50+
}
51+
extern "C" BOOL IMAGEAPI SymGetSymbolFileW(
52+
_In_opt_ HANDLE hProcess,
53+
_In_opt_ PCWSTR SymPath,
54+
_In_ PCWSTR ImageFile,
55+
_In_ DWORD Type,
56+
_Out_writes_(cSymbolFile) PWSTR SymbolFile,
57+
_In_ size_t cSymbolFile,
58+
_Out_writes_(cDbgFile) PWSTR DbgFile,
59+
_In_ size_t cDbgFile
60+
)
61+
{
62+
return TRUE;
63+
}
64+
extern "C" DWORD64 IMAGEAPI SymLoadModuleExW(
65+
_In_ HANDLE hProcess,
66+
_In_opt_ HANDLE hFile,
67+
_In_opt_ PCWSTR ImageName,
68+
_In_opt_ PCWSTR ModuleName,
69+
_In_ DWORD64 BaseOfDll,
70+
_In_ DWORD DllSize,
71+
_In_opt_ PMODLOAD_DATA Data,
72+
_In_opt_ DWORD Flags
73+
)
74+
{
75+
return TRUE;
76+
}
77+
extern "C" BOOL IMAGEAPI SymEnumSymbols(
78+
_In_ HANDLE hProcess,
79+
_In_ ULONG64 BaseOfDll,
80+
_In_opt_ PCSTR Mask,
81+
_In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
82+
_In_opt_ PVOID UserContext
83+
)
84+
{
85+
return TRUE;
86+
}
87+
extern "C" PVOID IMAGEAPI ImageDirectoryEntryToData(
88+
_In_ PVOID Base,
89+
_In_ BOOLEAN MappedAsImage,
90+
_In_ USHORT DirectoryEntry,
91+
_Out_ PULONG Size
92+
)
93+
{
94+
return nullptr;
95+
}
96+
extern "C" BOOL WINAPI MiniDumpWriteDump(
97+
_In_ HANDLE hProcess,
98+
_In_ DWORD ProcessId,
99+
_In_ HANDLE hFile,
100+
_In_ MINIDUMP_TYPE DumpType,
101+
_In_opt_ PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
102+
_In_opt_ PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
103+
_In_opt_ PMINIDUMP_CALLBACK_INFORMATION CallbackParam
104+
)
105+
{
106+
return TRUE;
107+
}
108+
extern "C" DWORD IMAGEAPI UnDecorateSymbolName(
109+
_In_ PCSTR name,
110+
_Out_writes_(maxStringLength) PSTR outputString,
111+
_In_ DWORD maxStringLength,
112+
_In_ DWORD flags
113+
)
114+
{
115+
return 0;
116+
}

0 commit comments

Comments
 (0)