Function at 0x46acb6
Capabilities:
Get common file path
Read .ini file

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x42c
push ebx
push esi
mov esi, dword [ebp + 0x1c]
xor ebx, ebx
cmp esi, ebx
jne 0x46a8a1
pop esi
mov eax, 0x80070057
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov eax, dword [ebp + 0xc]
push edi
cmp eax, 0x2710
jg 0x46aaf1
je 0x46aaca
cmp eax, 0x10f
jg 0x46aa44
je 0x46aa1a
sub eax, 0x69
je 0x46a9e0
sub eax, 0x91
je 0x46a96f
sub eax, 9
jne case.default.0x46aaff
mov eax, dword [esi]
mov eax, dword [eax + 0x18]
lea edx, [ebp + 0x18]
push edx
mov dword [ebp + 0x18], ebx
mov ecx, dword [eax]
push 0x474d3c
push eax
mov eax, dword [ecx]
call eax
test eax, eax
js 0x46a964
mov eax, dword [ebp + 0x18]
mov esi, dword [ebp + 8]
cmp eax, dword [esi + 0x44]
jne 0x46a95c
lea edx, [ebp + 8]
mov dword [ebp + 8], ebx
mov ecx, dword [eax]
push edx
push eax
mov eax, dword [ecx + 0x78]
call eax
mov eax, dword [ebp + 0x18]
lea edx, [ebp + 0x20]
mov dword [ebp + 0x20], ebx
mov ecx, dword [eax]
push edx
push eax
mov eax, dword [ecx + 0x74]
call eax
cmp dword [esi + 0x48], ebx
je 0x46a947
mov ecx, dword [esi + 0x48]
mov edx, dword [ecx]
lea eax, [esi + 0x18]
mov esi, dword [ebp + 8]
push esi
mov esi, dword [ebp + 0x20]
push esi
push eax
mov eax, dword [edx + 8]
call eax
mov ecx, dword [ebp + 8]
mov esi, dword [sym.imp.OLEAUT32.dll_SysStringLen]
push ecx
call esi
mov edx, dword [ebp + 0x20]
push edx
call esi
mov eax, dword [ebp + 0x18]
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov eax, dword [esi + 8]
mov ecx, dword [esi]
add eax, eax
mov edx, dword [ecx + eax*8 - 0x18]
mov edi, dword [edx + 8]
push 6
push str.fsp:__
push edi
call fcn.00411d06
add esp, 0xc
test eax, eax
jne 0x46a9be
mov eax, dword [esi]
mov ecx, dword [eax + 8]
mov eax, dword [ebp + 8]
or edx, 0xffffffff
mov word [ecx], dx
cmp dword [eax + 0x48], ebx
je 0x46a9d5
mov ecx, dword [eax + 0x48]
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push edi
push edx
mov edx, dword [eax + 0x10]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov eax, dword [ebp + 8]
cmp dword [eax + 0x48], ebx
je 0x46a9d5
mov ecx, dword [eax + 0x48]
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push edi
push edx
mov edx, dword [eax + 0xc]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov esi, dword [esi]
cmp word [esi + 8], 0xffff
sete cl
cmp dword [esi + 0x18], 2
mov byte [ebp + 0x18], cl
jne 0x46aa0f
mov eax, dword [ebp + 8]
cmp dword [eax + 0x48], ebx
je 0x46aa0f
mov esi, dword [ebp + 0x18]
mov ecx, dword [eax + 0x48]
push esi
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push 2
push edx
mov edx, dword [eax + 4]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov eax, dword [esi]
mov ecx, dword [eax + 0x18]
mov eax, dword [ebp + 8]
mov esi, dword [ecx + 8]
cmp dword [eax + 0x48], ebx
je 0x46aa39
mov ecx, dword [eax + 0x48]
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push esi
push edx
mov edx, dword [eax + 0x3c]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
cmp eax, 0x111
je 0x46aa7d
cmp eax, 0x3e8
jne case.default.0x46aaff
test byte [ebp + 0x18], 1
je case.default.0x46aaff
mov eax, dword [ebp + 0x20]
pop edi
or edx, 0xffffffff
mov ecx, 0xb
pop esi
mov word [eax], cx
mov word [eax + 8], dx
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov eax, dword [esi]
movzx ecx, word [eax]
xor edx, edx
cmp ecx, 8
jne 0x46aa8e
mov edx, dword [eax + 8]
jmp 0x46aa9d
mov edi, 0x4008
cmp cx, di
jne 0x46aa9d
mov eax, dword [eax + 8]
mov edx, dword [eax]
mov eax, dword [ebp + 8]
cmp dword [eax + 0x48], ebx
je 0x46aab4
mov ecx, dword [eax + 0x48]
lea edi, [eax + 0x18]
mov eax, dword [ecx]
push edx
mov edx, dword [eax + 0x34]
push edi
call edx
mov eax, dword [esi]
mov ecx, dword [eax + 0x38]
pop edi
or edx, 0xffffffff
pop esi
mov word [ecx], dx
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov eax, dword [esi]
mov esi, dword [eax + 8]
mov eax, dword [ebp + 8]
cmp dword [eax + 0x48], ebx
je 0x46aae6
mov ecx, dword [eax + 0x48]
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push esi
push edx
mov edx, dword [eax + 0x14]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
add eax, 0xffffd8ef
cmp eax, 0xc
ja case.default.0x46aaff
jmp dword [eax*4 + 0x46ae20]
mov eax, dword [esi]
mov esi, dword [eax + 8]
mov eax, dword [ebp + 8]
cmp dword [eax + 0x48], ebx
je 0x46ab22
mov ecx, dword [eax + 0x48]
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push esi
push edx
mov edx, dword [eax + 0x18]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov eax, dword [esi]
mov esi, dword [eax + 8]
mov eax, dword [ebp + 8]
cmp dword [eax + 0x48], ebx
je 0x46ab49
mov ecx, dword [eax + 0x48]
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push esi
push edx
mov edx, dword [eax + 0x1c]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
cmp dword [esi + 8], 3
jne 0x46ab7e
mov eax, dword [ebp + 8]
cmp dword [eax + 0x48], ebx
je 0x46ab7e
mov esi, dword [esi]
mov edi, dword [esi + 0x28]
mov ecx, dword [eax + 0x48]
push edi
mov edi, dword [esi + 0x18]
mov esi, dword [esi + 8]
push edi
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push esi
push edx
mov edx, dword [eax + 0x24]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov eax, dword [ebp + 8]
cmp dword [eax + 0x48], ebx
je 0x46aba5
mov esi, dword [esi]
mov esi, dword [esi + 8]
mov ecx, dword [eax + 0x48]
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push esi
push edx
mov edx, dword [eax + 0x28]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
push 0x206
lea ecx, [ebp - 0x222]
xor eax, eax
push ebx
push ecx
mov word [ebp - 0x224], ax
call fcn.00412ae0
add esp, 0xc
push ebx
push 0x28
lea edx, [ebp - 0x224]
push edx
push ebx
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathW]
push 0x47ced4
lea eax, [ebp - 0x224]
push eax
call dword [sym.imp.SHLWAPI.dll_PathAppendW]
push 0x206
lea edx, [ebp - 0x42a]
xor ecx, ecx
push ebx
push edx
mov word [ebp - 0x42c], cx
call fcn.00412ae0
add esp, 0xc
lea eax, [ebp - 0x224]
push eax
push 0x104
lea ecx, [ebp - 0x42c]
push ecx
push str.0000000000000
push str.detail
push str.fsprotect
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
mov esi, dword [ebp + 0x20]
lea eax, [ebp - 0x42c]
mov edx, 8
push eax
mov word [esi], dx
call dword [sym.imp.OLEAUT32.dll_SysReAllocString]
pop edi
mov dword [esi + 8], eax
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov esi, dword [ebp + 0x20]
mov ecx, 8
mov word [esi], cx
lea ecx, [ebp - 0x1c]
call fcn.004037a0
cmp dword [eax + 0x14], 8
jb 0x46ac78
mov eax, dword [eax]
push eax
call dword [sym.imp.OLEAUT32.dll_SysReAllocString]
mov dword [esi + 8], eax
lea esi, [ebp - 0x1c]
call fcn.00401a50
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov eax, dword [ebp + 8]
cmp dword [eax + 0x48], ebx
je 0x46acab
mov ecx, dword [eax + 0x48]
lea edx, [eax + 0x18]
mov eax, dword [ecx]
push edx
mov edx, dword [eax + 0x2c]
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
push 0x206
lea ecx, [ebp - 0x222]
xor eax, eax
push ebx
push ecx
mov word [ebp - 0x224], ax
call fcn.00412ae0
add esp, 0xc
push ebx
push 0x28
lea edx, [ebp - 0x224]
push edx
push ebx
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathW]
push 0x47ced4
lea eax, [ebp - 0x224]
push eax
call dword [sym.imp.SHLWAPI.dll_PathAppendW]
push 0x206
lea edx, [ebp - 0x42a]
xor ecx, ecx
push ebx
push edx
mov word [ebp - 0x42c], cx
call fcn.00412ae0
add esp, 0xc
lea eax, [ebp - 0x224]
push eax
push 0x104
lea ecx, [ebp - 0x42c]
push ecx
push 0x47d254
push 0x47d258
push str.FunShion_Player
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
mov esi, dword [ebp + 0x20]
lea eax, [ebp - 0x42c]
mov edx, 8
push eax
mov word [esi], dx
call dword [sym.imp.OLEAUT32.dll_SysReAllocString]
pop edi
mov dword [esi + 8], eax
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov esi, dword [ebp + 0x20]
mov edx, dword [0x48a7b4]
mov ecx, 8
mov word [esi], cx
cmp byte [edx + 0xa0], bl
je 0x46ad95
push 0x47d280
call dword [sym.imp.OLEAUT32.dll_SysReAllocString]
pop edi
mov dword [esi + 8], eax
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
push 0x47d284
call dword [sym.imp.OLEAUT32.dll_SysReAllocString]
pop edi
mov dword [esi + 8], eax
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov esi, dword [esi]
mov eax, dword [ebp + 8]
mov ecx, dword [esi + 8]
mov edx, dword [esi + 0x18]
mov esi, dword [esi + 0x28]
cmp dword [eax + 0x48], ebx
je 0x46add4
push edx
lea edi, [eax + 0x18]
mov eax, dword [eax + 0x48]
mov ebx, dword [eax]
push esi
push ecx
mov ecx, eax
mov eax, dword [ebx + 0x40]
push edi
call eax
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov esi, dword [esi]
mov eax, dword [ebp + 8]
mov ecx, dword [esi + 8]
mov edx, dword [esi + 0x18]
mov esi, dword [esi + 0x28]
cmp dword [eax + 0x48], ebx
je case.0x46aaff.10003
push edx
lea edi, [eax + 0x18]
mov eax, dword [eax + 0x48]
mov ebx, dword [eax]
mov edx, dword [ebx + 0x44]
push esi
push ecx
push edi
mov ecx, eax
call edx
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24
pop edi
pop esi
mov eax, 0x80004001
pop ebx
mov esp, ebp
pop ebp
ret 0x24