mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-23 18:45:36 +00:00
Common_Ntapi: Error handling via logs
This commit is contained in:
parent
7b0249d9ca
commit
51270ca175
@ -67,6 +67,7 @@ bool ParseFilterRule(Filter& instance, Iterator begin, Iterator end) {
|
||||
CLS(Common) \
|
||||
SUB(Common, Filesystem) \
|
||||
SUB(Common, Memory) \
|
||||
SUB(Common, NtApi) \
|
||||
CLS(Core) \
|
||||
SUB(Core, Linker) \
|
||||
SUB(Core, Devices) \
|
||||
|
@ -33,6 +33,7 @@ enum class Class : u8 {
|
||||
Common, ///< Library routines
|
||||
Common_Filesystem, ///< Filesystem interface library
|
||||
Common_Memory, ///< Memory mapping and management functions
|
||||
Common_Ntapi, ///< Native Windows API
|
||||
Core, ///< LLE emulation core
|
||||
Core_Linker, ///< The module linker
|
||||
Core_Devices, ///< Devices emulation
|
||||
|
@ -1,30 +1,118 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#include "ntapi.h"
|
||||
|
||||
NtClose_t NtClose = nullptr;
|
||||
NtSetInformationFile_t NtSetInformationFile = nullptr;
|
||||
NtCreateThread_t NtCreateThread = nullptr;
|
||||
NtTerminateThread_t NtTerminateThread = nullptr;
|
||||
NtQueueApcThreadEx_t NtQueueApcThreadEx = nullptr;
|
||||
|
||||
namespace Common::NtApi {
|
||||
|
||||
void Initialize() {
|
||||
HMODULE nt_handle = GetModuleHandleA("ntdll.dll");
|
||||
|
||||
// http://stackoverflow.com/a/31411628/4725495
|
||||
NtClose = (NtClose_t)GetProcAddress(nt_handle, "NtClose");
|
||||
NtSetInformationFile =
|
||||
(NtSetInformationFile_t)GetProcAddress(nt_handle, "NtSetInformationFile");
|
||||
NtCreateThread = (NtCreateThread_t)GetProcAddress(nt_handle, "NtCreateThread");
|
||||
NtTerminateThread = (NtTerminateThread_t)GetProcAddress(nt_handle, "NtTerminateThread");
|
||||
NtQueueApcThreadEx = (NtQueueApcThreadEx_t)GetProcAddress(nt_handle, "NtQueueApcThreadEx");
|
||||
}
|
||||
|
||||
} // namespace Common::NtApi
|
||||
|
||||
#endif
|
||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#include "ntapi.h"
|
||||
#include "logging/log.h"
|
||||
|
||||
NtClose_t NtClose = nullptr;
|
||||
NtSetInformationFile_t NtSetInformationFile = nullptr;
|
||||
NtCreateThread_t NtCreateThread = nullptr;
|
||||
NtTerminateThread_t NtTerminateThread = nullptr;
|
||||
NtQueueApcThreadEx_t NtQueueApcThreadEx = nullptr;
|
||||
|
||||
namespace Common::NtApi {
|
||||
|
||||
void Initialize() {
|
||||
HMODULE nt_handle = GetModuleHandleA("ntdll.dll");
|
||||
if(nt_handle == NULL){
|
||||
LPVOID message_buffer;
|
||||
DWORD buffer_len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR) &message_buffer,
|
||||
0, NULL );
|
||||
if(buffer_len){
|
||||
std::string message((LPCSTR)message_buffer, (LPCSTR)message_buffer + buffer_len);
|
||||
LocalFree(message_buffer);
|
||||
LOG_WARNING(Common_Ntapi, "{}", message);
|
||||
}
|
||||
}
|
||||
|
||||
// http://stackoverflow.com/a/31411628/4725495
|
||||
NtClose = (NtClose_t)GetProcAddress(nt_handle, "NtClose");
|
||||
if(NtClose == NULL){
|
||||
LPVOID message_buffer;
|
||||
DWORD buffer_len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR) &message_buffer,
|
||||
0, NULL );
|
||||
if(buffer_len){
|
||||
std::string message((LPCSTR)message_buffer, (LPCSTR)message_buffer + buffer_len);
|
||||
LocalFree(message_buffer);
|
||||
LOG_WARNING(Common_Ntapi, "{}", message);
|
||||
}
|
||||
}
|
||||
|
||||
NtSetInformationFile = (NtSetInformationFile_t)GetProcAddress(nt_handle, "NtSetInformationFile");
|
||||
if(NtSetInformationFile == NULL){
|
||||
LPVOID message_buffer;
|
||||
DWORD buffer_len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR) &message_buffer,
|
||||
0, NULL );
|
||||
if(buffer_len){
|
||||
std::string message((LPCSTR)message_buffer, (LPCSTR)message_buffer + buffer_len);
|
||||
LocalFree(message_buffer);
|
||||
LOG_WARNING(Common_Ntapi, "{}", message);
|
||||
}
|
||||
}
|
||||
|
||||
NtCreateThread = (NtCreateThread_t)GetProcAddress(nt_handle, "NtCreateThread");
|
||||
if(NtCreateThread == NULL){
|
||||
LPVOID message_buffer;
|
||||
DWORD buffer_len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR) &message_buffer,
|
||||
0, NULL );
|
||||
if(buffer_len){
|
||||
std::string message((LPCSTR)message_buffer, (LPCSTR)message_buffer + buffer_len);
|
||||
LocalFree(message_buffer);
|
||||
LOG_WARNING(Common_Ntapi, "{}", message);
|
||||
}
|
||||
}
|
||||
|
||||
NtTerminateThread = (NtTerminateThread_t)GetProcAddress(nt_handle, "NtTerminateThread");
|
||||
if(NtTerminateThread == NULL){
|
||||
LPVOID message_buffer;
|
||||
DWORD buffer_len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR) &message_buffer,
|
||||
0, NULL );
|
||||
if(buffer_len){
|
||||
std::string message((LPCSTR)message_buffer, (LPCSTR)message_buffer + buffer_len);
|
||||
LocalFree(message_buffer);
|
||||
LOG_WARNING(Common_Ntapi, "{}", message);
|
||||
}
|
||||
}
|
||||
|
||||
NtQueueApcThreadEx = (NtQueueApcThreadEx_t)GetProcAddress(nt_handle, "NtQueueApcThreadEx");
|
||||
if(NtQueueApcThreadEx == NULL){
|
||||
LPVOID message_buffer;
|
||||
DWORD buffer_len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR) &message_buffer,
|
||||
0, NULL );
|
||||
if(buffer_len){
|
||||
std::string message((LPCSTR)message_buffer, (LPCSTR)message_buffer + buffer_len);
|
||||
LocalFree(message_buffer);
|
||||
LOG_WARNING(Common_Ntapi, "{}", message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Common::NtApi
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user