Function at 0x4121d0
Capabilities:
Check if file exists
Check os version
Create directory
Get common file path
Get file attributes
Read .ini file

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x415547
mov eax, dword fs:[0]
push eax
sub esp, 0x4c8
mov eax, dword [0x41e130]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov ebx, dword [ebp + 8]
lea ecx, [ebp - 0x4c0]
mov dword [ebp - 0x4d4], ebx
mov dword [ebp - 0x4d0], 0
call dword [sym.imp.Common.dll_public:_void___thiscall_CTXStringW::constructor_void_]
mov esi, dword [sym.imp.Common.dll_public:_bool___thiscall_CTXStringW::IsEmpty_void_const]
mov edi, 1
lea ecx, [ebp - 0x4c0]
mov dword [ebp - 4], edi
call esi
test al, al
jne 0x412263
lea eax, [ebp - 0x4c0]
push eax
mov ecx, ebx
call dword [sym.imp.Common.dll_public:_void___thiscall_CTXStringW::constructor_class_CTXStringW_const__]
lea ecx, [ebp - 0x4c0]
mov dword [ebp - 0x4d0], edi
mov byte [ebp - 4], 0
call dword [sym.imp.Common.dll_public:_void___thiscall_CTXStringW::destructor_void_]
mov eax, ebx
jmp 0x412546
push 0x110
lea ecx, [ebp - 0x4b8]
push 0
push ecx
call sub.MSVCR80.dll_memset
add esp, 0xc
lea edx, [ebp - 0x4bc]
push edx
mov dword [ebp - 0x4bc], 0x114
call dword [sym.imp.KERNEL32.dll_GetVersionExW]
xor ebx, ebx
cmp dword [ebp - 0x4b8], 6
jb 0x41229d
mov ebx, edi
lea eax, [ebp - 0x4c8]
push eax
call fcn.00411f40
add esp, 4
lea ecx, [ebp - 0x4c8]
mov byte [ebp - 4], 2
call esi
test al, al
mov edi, dword [sym.imp.Common.dll_public:_void___thiscall_CTXStringW::destructor_void_]
jne 0x4123f0
push str.UserDataInfo.ini
lea ecx, [ebp - 0x4c8]
call dword [0x416078]
lea ecx, [ebp - 0x4c8]
call dword [sym.imp.Common.dll_public:_wchar_t_const____thiscall_CTXStringW::operator_wchar_t_const__void_const]
push eax
push ebx
push str.UserDataSavePathType
push str.UserDataSet
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileIntW]
cmp eax, 2
mov dword [ebp - 0x4c4], eax
jne 0x4123ea
push 0x206
lea ecx, [ebp - 0x216]
push 0
push ecx
mov word [ebp - 0x218], 0
call sub.MSVCR80.dll_memset
add esp, 0xc
lea ecx, [ebp - 0x4c8]
call dword [sym.imp.Common.dll_public:_wchar_t_const____thiscall_CTXStringW::operator_wchar_t_const__void_const]
push eax
push 0x103
lea edx, [ebp - 0x218]
push edx
push 0x41672c
push str.UserDataSavePath
push str.UserDataSet
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
lea eax, [ebp - 0x218]
push eax
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_class_CTXStringW____thiscall_CTXStringW::operator_wchar_t__]
lea ecx, [ebp - 0x4c0]
call esi
test al, al
je 0x41237a
mov dword [ebp - 0x4c4], 3
push 1
lea ecx, [ebp - 0x4cc]
push ecx
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_class_CTXStringW___thiscall_CTXStringW::Right_int_]
push 0x5c
push eax
call dword [sym.imp.Common.dll_bool___cdecl_operator__class_CTXStringW_const___wchar_t_]
add esp, 8
lea ecx, [ebp - 0x4cc]
mov bl, al
call edi
test bl, bl
je 0x4123b7
push 0x5c
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_class_CTXStringW____thiscall_CTXStringW::operator_wchar_t_]
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_wchar_t_const____thiscall_CTXStringW::operator_wchar_t_const__void_const]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
jne 0x4123ea
push 0
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_wchar_t_const____thiscall_CTXStringW::operator_wchar_t_const__void_const]
push eax
push 0
call dword [sym.imp.SHELL32.dll_SHCreateDirectoryExW]
test eax, eax
jne 0x4123f5
mov ebx, dword [ebp - 0x4c4]
cmp ebx, 3
jb 0x412400
cmp dword [ebp - 0x4b8], 6
jb 0x412404
jmp 0x412443
test ebx, ebx
jne 0x41243a
lea edx, [ebp - 0x4cc]
push edx
call fcn.00412050
add esp, 4
push eax
lea ecx, [ebp - 0x4c0]
mov byte [ebp - 4], 3
call dword [sym.imp.Common.dll_public:_class_CTXStringW____thiscall_CTXStringW::operator_class_CTXStringW_const__]
lea ecx, [ebp - 0x4cc]
mov byte [ebp - 4], 2
call edi
push str.Users_
jmp 0x4124bf
cmp ebx, 1
jne 0x4124cb
push 1
push 5
lea eax, [ebp - 0x3a8]
push eax
push 0
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathW]
test eax, eax
je 0x4124cb
lea ecx, [ebp - 0x3a8]
push ecx
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_class_CTXStringW____thiscall_CTXStringW::operator_wchar_t__]
push 0x5c
push 0x2f
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_int___thiscall_CTXStringW::Replace_wchar_t__wchar_t_]
push 1
lea edx, [ebp - 0x4cc]
push edx
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_class_CTXStringW___thiscall_CTXStringW::Right_int_]
push 0x5c
push eax
call dword [sym.imp.Common.dll_bool___cdecl_operator__class_CTXStringW_const___wchar_t_]
add esp, 8
lea ecx, [ebp - 0x4cc]
mov bl, al
call edi
test bl, bl
je 0x4124ba
push 0x5c
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_class_CTXStringW____thiscall_CTXStringW::operator_wchar_t_]
push str.Tencent_Files_
lea ecx, [ebp - 0x4c0]
call dword [0x416078]
mov esi, dword [sym.imp.Common.dll_public:_wchar_t_const____thiscall_CTXStringW::operator_wchar_t_const__void_const]
lea ecx, [ebp - 0x4c0]
call esi
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
jne 0x41250d
push 0
lea ecx, [ebp - 0x4c0]
call esi
push eax
push 0
call dword [sym.imp.SHELL32.dll_SHCreateDirectoryExW]
test eax, eax
je 0x41250d
push 0x41672c
lea ecx, [ebp - 0x4c0]
call dword [sym.imp.Common.dll_public:_class_CTXStringW____thiscall_CTXStringW::operator_wchar_t_const__]
mov esi, dword [ebp - 0x4d4]
lea eax, [ebp - 0x4c0]
push eax
mov ecx, esi
call dword [sym.imp.Common.dll_public:_void___thiscall_CTXStringW::constructor_class_CTXStringW_const__]
lea ecx, [ebp - 0x4c8]
mov dword [ebp - 0x4d0], 1
mov byte [ebp - 4], 1
call edi
lea ecx, [ebp - 0x4c0]
mov byte [ebp - 4], 0
call edi
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.00412d02
mov esp, ebp
pop ebp
ret