// // FMOD_OS_File_Open from 0x1800c0d40 to 0x1800c0eaf (367 bytes) // // 6 xrefs: // > sub_1800B41C0 @ 0x1800b41cf // > sub_1800BEF40 @ 0x1800bf09c // > sub_1800BF3B0 @ 0x1800bf4df // > sub_180114370 @ 0x1801143dd // > @ 0x180194348 // > @ 0x1801fdb48 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // __int64 __fastcall FMOD_OS_File_Open(LPCCH lpMultiByteStr, DWORD dwShareMode, DWORD *a3, _QWORD *a4) { unsigned int v7; // ebx DWORD LowPart; // eax HANDLE FileW; // rbx HANDLE v10; // rax DWORD LastError; // eax LARGE_INTEGER FileSize; // [rsp+40h] [rbp-258h] BYREF WCHAR WideCharStr[256]; // [rsp+50h] [rbp-248h] BYREF _DWORD *v15; // [rsp+250h] [rbp-48h] LPCWSTR lpFileName; // [rsp+258h] [rbp-40h] lpFileName = WideCharStr; v15 = nullptr; WideCharStr[0] = 0; v7 = sub_1800C0900(WideCharStr, lpMultiByteStr); if ( !v7 ) { LowPart = 0; FileW = nullptr; FileSize.QuadPart = 0; if ( dwShareMode ) { if ( dwShareMode != 1 ) { LABEL_14: *a4 = FileW; v7 = 0; *a3 = LowPart; goto LABEL_15; } FileW = CreateFileW(lpFileName, 0x40000000u, 1u, nullptr, 2u, 0x80u, nullptr); if ( FileW == (HANDLE)-1LL ) { v7 = 13; goto LABEL_15; } } else { v10 = CreateFileW(lpFileName, 0x80000000, 1u, nullptr, 3u, 0x80u, nullptr); FileW = v10; if ( v10 == (HANDLE)-1LL ) { LastError = GetLastError(); if ( LastError - 2 <= 1 || LastError == 123 ) v7 = 18; else v7 = 13; goto LABEL_15; } if ( !GetFileSizeEx(v10, &FileSize) ) { v7 = 13; goto LABEL_15; } } LowPart = FileSize.LowPart; goto LABEL_14; } LABEL_15: if ( v15 ) sub_1800B6AA0(*((_QWORD *)off_1801AED20 + 52), v15); return v7; }