Make more stuff loggable (#885)

This commit is contained in:
kizer 2022-06-18 04:06:38 +09:00 committed by GitHub
parent cd2649fec1
commit 04cdd3338f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 15 deletions

View file

@ -11,18 +11,38 @@ HINSTANCE g_hGameInstance = GetModuleHandleW(nullptr);
DllExport DWORD WINAPI Initialize(LPVOID lpParam, HANDLE hMainThreadContinue) {
if (bootconfig::is_show_console())
ConsoleSetup(L"Dalamud Boot");
logging::update_dll_load_status(true);
if (const auto logFilePath = utils::get_env<std::wstring>("DALAMUD_BOOT_LOGFILE"); logFilePath.empty())
if (const auto logFilePath = utils::get_env<std::wstring>("DALAMUD_BOOT_LOGFILE"); logFilePath.empty()) {
if (!bootconfig::is_show_console() && !bootconfig::is_disable_fallback_console())
ConsoleSetup(L"Dalamud Boot - Fallback Console");
logging::I("No log file path given; not logging to file.");
else {
} else {
try {
logging::start_file_logging(logFilePath, !bootconfig::is_show_console());
logging::I("Logging to file: {}", logFilePath);
} catch (const std::exception& e) {
if (!bootconfig::is_show_console() && !bootconfig::is_disable_fallback_console())
ConsoleSetup(L"Dalamud Boot - Fallback Console");
logging::E("Couldn't open log file: {}", logFilePath);
logging::E("Error: {} / {}", errno, e.what());
}
}
auto minHookLoaded = false;
if (const auto mhStatus = MH_Initialize(); mhStatus == MH_OK) {
logging::I("MinHook initialized.");
minHookLoaded = true;
} else if (mhStatus == MH_ERROR_ALREADY_INITIALIZED) {
logging::I("MinHook already initialized.");
minHookLoaded = true;
} else {
logging::E("Failed to initialize MinHook (status={}({}))", MH_StatusToString(mhStatus), static_cast<int>(mhStatus));
}
logging::I("Dalamud.Boot Injectable, (c) 2021 XIVLauncher Contributors");
logging::I("Built at: " __DATE__ "@" __TIME__);
@ -30,9 +50,13 @@ DllExport DWORD WINAPI Initialize(LPVOID lpParam, HANDLE hMainThreadContinue) {
if (bootconfig::wait_messagebox() & bootconfig::WaitMessageboxFlags::BeforeInitialize)
MessageBoxW(nullptr, L"Press OK to continue", L"Dalamud Boot", MB_OK);
logging::I("Applying fixes...");
xivfixes::apply_all(true);
logging::I("Fixes OK");
if (minHookLoaded) {
logging::I("Applying fixes...");
xivfixes::apply_all(true);
logging::I("Fixes OK");
} else {
logging::W("Skipping fixes, as MinHook has failed to load.");
}
if (bootconfig::is_wait_debugger()) {
logging::I("Waiting for debugger to attach...");
@ -104,20 +128,19 @@ BOOL APIENTRY DllMain(const HMODULE hModule, const DWORD dwReason, LPVOID lpRese
switch (dwReason) {
case DLL_PROCESS_ATTACH:
g_hModule = hModule;
if (const auto mhStatus = MH_Initialize(); MH_OK != mhStatus) {
logging::E("Failed to initialize MinHook (status={})", static_cast<int>(mhStatus));
return FALSE;
}
logging::update_dll_load_status(true);
break;
case DLL_PROCESS_DETACH:
// process is terminating; don't bother cleaning up
if (lpReserved)
return TRUE;
logging::update_dll_load_status(false);
xivfixes::apply_all(false);
if (const auto mhStatus = MH_Uninitialize(); MH_OK != mhStatus) {
MH_DisableHook(MH_ALL_HOOKS);
if (const auto mhStatus = MH_Uninitialize(); MH_OK != mhStatus && MH_ERROR_NOT_INITIALIZED != mhStatus) {
logging::E("Failed to uninitialize MinHook (status={})", static_cast<int>(mhStatus));
__fastfail(logging::MinHookUnload);
}