[Windows] Disable MSVC control flow check on IAT hooks.

(cherry picked from commit 9c753ebe8432991c88a0b0c934f8dea029f59b6f)
This commit is contained in:
bruvzg
2026-01-27 10:12:14 +02:00
committed by Thaddeus Crews
parent 45f8e0894b
commit 5222598c11

View File

@@ -2758,6 +2758,12 @@ bool OS_Windows::_test_create_rendering_device_and_gl(const String &p_display_dr
}
#endif
#ifdef _MSC_VER
#define IAT_HOOK_CALL __declspec(guard(nocf))
#else
#define IAT_HOOK_CALL
#endif
using GetProcAddressType = FARPROC(__stdcall *)(HMODULE, LPCSTR);
GetProcAddressType Original_GetProcAddress = nullptr;
@@ -2793,7 +2799,7 @@ bool _hid_is_controller(HANDLE p_hid_handle) {
return false;
}
BOOLEAN __stdcall Hook_HidD_GetProductString(HANDLE p_object, void *p_buffer, ULONG p_buffer_length) {
IAT_HOOK_CALL BOOLEAN __stdcall Hook_HidD_GetProductString(HANDLE p_object, void *p_buffer, ULONG p_buffer_length) {
constexpr const wchar_t unknown_product_string[] = L"Unknown HID Device";
constexpr size_t unknown_product_length = sizeof(unknown_product_string);
@@ -2811,7 +2817,7 @@ BOOLEAN __stdcall Hook_HidD_GetProductString(HANDLE p_object, void *p_buffer, UL
return FALSE;
}
FARPROC __stdcall Hook_GetProcAddress(HMODULE p_module, LPCSTR p_name) {
IAT_HOOK_CALL FARPROC __stdcall Hook_GetProcAddress(HMODULE p_module, LPCSTR p_name) {
if (String(p_name) == "HidD_GetProductString") {
return (FARPROC)(LPVOID)Hook_HidD_GetProductString;
}