Delay any UI work until ATL/COM and the app module are initialized.

This commit is contained in:
BeneficialCode
2026-05-06 15:57:19 +08:00
parent 84f2b3ea4f
commit c2c2c9c6e0
5 changed files with 60 additions and 46 deletions
+1 -1
View File
@@ -62,6 +62,6 @@ NTSTATUS BypassAntiKernelDbg::Unbypass() {
status = DetourTransactionCommit();
if (!NT_SUCCESS(status))
return status;
return STATUS_SUCCESS;
}
+14 -5
View File
@@ -139,13 +139,22 @@ downslib_error SymbolFileInfo::Download(std::string url, std::wstring fileName,
}
SymbolFileInfo::SymbolFileInfo() {
std::string url = "https://msdl.microsoft.com/download/symbols";
}
bool SymbolFileInfo::ConfigureServer(HWND hWndParent) {
CConfigServerDbg dlg;
if (dlg.DoModal() == IDOK) {
url = dlg.GetServer();
if (dlg.DoModal(hWndParent) == IDOK) {
SetServer(dlg.GetServer());
return true;
}
return false;
}
void SymbolFileInfo::SetServer(std::string server) {
if (!server.empty()) {
_server = std::move(server);
}
_server = url;
}
SymbolFileInfo::~SymbolFileInfo() {
}
}
+3 -1
View File
@@ -42,6 +42,8 @@ public:
struct SymbolFileInfo {
SymbolFileInfo();
~SymbolFileInfo();
bool ConfigureServer(HWND hWndParent = nullptr);
void SetServer(std::string server);
bool SymDownloadSymbol(std::wstring localFile);
bool GetPdbSignature(ULONG_PTR imageBase,PIMAGE_DEBUG_DIRECTORY entry);
downslib_error Download(std::string url, std::wstring fileName,
@@ -52,4 +54,4 @@ struct SymbolFileInfo {
PdbValidationData _pdbValidation;
CString _path;
std::string _server = "https://msdl.microsoft.com/download/symbols";
};
};
+3
View File
@@ -123,6 +123,9 @@ int Run(LPTSTR lpstrCmdLine = nullptr, int nCmdShow = SW_SHOWDEFAULT) {
CMessageLoop theLoop;
_Module.AddMessageLoop(&theLoop);
// Delay any UI work until ATL/COM and the app module are initialized.
g_SymbolHelper.ConfigureServer();
HANDLE hThread = ::CreateThread(nullptr, 0, [](auto param)->DWORD {
std::string name = Helpers::GetNtosFileName();
std::wstring osFileName = Helpers::StringToWstring(name);
+39 -39
View File
@@ -753,20 +753,20 @@ typedef struct _FILE_ID_EXTD_BOTH_DIR_INFORMATION
} FILE_ID_EXTD_BOTH_DIR_INFORMATION, *PFILE_ID_EXTD_BOTH_DIR_INFORMATION;
// private
typedef struct _FILE_STAT_INFORMATION
{
LARGE_INTEGER FileId;
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER EndOfFile;
ULONG FileAttributes;
ULONG ReparseTag;
ULONG NumberOfLinks;
ULONG EffectiveAccess;
} FILE_STAT_INFORMATION, *PFILE_STAT_INFORMATION;
//typedef struct _FILE_STAT_INFORMATION
//{
// LARGE_INTEGER FileId;
// LARGE_INTEGER CreationTime;
// LARGE_INTEGER LastAccessTime;
// LARGE_INTEGER LastWriteTime;
// LARGE_INTEGER ChangeTime;
// LARGE_INTEGER AllocationSize;
// LARGE_INTEGER EndOfFile;
// ULONG FileAttributes;
// ULONG ReparseTag;
// ULONG NumberOfLinks;
// ULONG EffectiveAccess;
//} FILE_STAT_INFORMATION, *PFILE_STAT_INFORMATION;
// private
typedef struct _FILE_MEMORY_PARTITION_INFORMATION
@@ -783,33 +783,33 @@ typedef struct _FILE_MEMORY_PARTITION_INFORMATION
} Flags;
} FILE_MEMORY_PARTITION_INFORMATION, *PFILE_MEMORY_PARTITION_INFORMATION;
// private
typedef struct _FILE_STAT_LX_INFORMATION
{
LARGE_INTEGER FileId;
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER EndOfFile;
ULONG FileAttributes;
ULONG ReparseTag;
ULONG NumberOfLinks;
ULONG EffectiveAccess;
ULONG LxFlags;
ULONG LxUid;
ULONG LxGid;
ULONG LxMode;
ULONG LxDeviceIdMajor;
ULONG LxDeviceIdMinor;
} FILE_STAT_LX_INFORMATION, *PFILE_STAT_LX_INFORMATION;
//// private
//typedef struct _FILE_STAT_LX_INFORMATION
//{
// LARGE_INTEGER FileId;
// LARGE_INTEGER CreationTime;
// LARGE_INTEGER LastAccessTime;
// LARGE_INTEGER LastWriteTime;
// LARGE_INTEGER ChangeTime;
// LARGE_INTEGER AllocationSize;
// LARGE_INTEGER EndOfFile;
// ULONG FileAttributes;
// ULONG ReparseTag;
// ULONG NumberOfLinks;
// ULONG EffectiveAccess;
// ULONG LxFlags;
// ULONG LxUid;
// ULONG LxGid;
// ULONG LxMode;
// ULONG LxDeviceIdMajor;
// ULONG LxDeviceIdMinor;
//} FILE_STAT_LX_INFORMATION, *PFILE_STAT_LX_INFORMATION;
// private
typedef struct _FILE_CASE_SENSITIVE_INFORMATION
{
ULONG Flags;
} FILE_CASE_SENSITIVE_INFORMATION, *PFILE_CASE_SENSITIVE_INFORMATION;
//typedef struct _FILE_CASE_SENSITIVE_INFORMATION
//{
// ULONG Flags;
//} FILE_CASE_SENSITIVE_INFORMATION, *PFILE_CASE_SENSITIVE_INFORMATION;
// NtQueryDirectoryFile types