Function at 0x47da60
Capabilities:
Create directory
Get common file path
Get file attributes
Get program files directory

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x4a656c
mov eax, dword fs:[0]
push eax
sub esp, 0x50
push ebx
push esi
push edi
mov eax, dword [0x4c9144]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov dword [ebp - 0x10], esp
push 2
xor ebx, ebx
push ebx
call dword [sym.imp.ole32.dll_CoInitializeEx]
call fcn.0047fdc0
cmp eax, 1
jne 0x47e16b
push ecx
mov dword [ebp - 0x18], esp
push esp
mov ecx, 0x4ab684
call fcn.0041be20
push ecx
mov dword [ebp - 4], ebx
mov dword [ebp - 0x20], esp
push esp
mov ecx, 0x4ab684
call fcn.0041be20
push ecx
mov byte [ebp - 4], 1
mov dword [ebp - 0x24], esp
push esp
mov ecx, 0x4ab684
call fcn.0041be20
lea eax, [ebp - 0x1c]
or esi, 0xffffffff
push eax
mov dword [ebp - 4], esi
call fcn.00418320
add esp, 0x10
mov edi, 0x4d2da8
mov dword [ebp - 4], 2
call fcn.00417620
mov dword [ebp - 4], esi
mov eax, dword [ebp - 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x47db1c
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov ecx, dword [0x4d2da8]
push ebx
push ecx
call dword [sym.imp.KERNEL32.dll_CreateDirectoryW]
mov edx, dword [0x4d2da8]
mov edi, dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
push edx
call edi
cmp eax, esi
je 0x47e14a
mov eax, dword [0x4d2da8]
push eax
call edi
test al, 0x10
je 0x47e14a
push 0x10
call fcn.004881ae
mov edi, eax
add esp, 4
mov dword [ebp - 0x24], edi
mov dword [ebp - 4], 3
cmp edi, ebx
je 0x47db7b
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleHandleW]
push eax
push edi
call fcn.0041d1d0
jmp 0x47db7d
xor eax, eax
mov dword [ebp - 4], esi
mov dword [0x4d2910], eax
call fcn.0047e180
mov edi, eax
cmp edi, 1
je 0x47dbc1
cmp byte [0x4d289a], 0
jne 0x47dbad
push 0x10
push 0x4abb10
push str.A_fatal_error_occured__the_setup_cannot_continue._nError_Code:_8004a._n_nPlease_try_to_download_the_setup_again_from_another_source.
push ebx
call dword [sym.imp.USER32.dll_MessageBoxW]
mov eax, edi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
call fcn.0047f3c0
cmp eax, 1
jne 0x47e16b
push ebx
lea ecx, [ebp - 0x40]
push ecx
push 0x4d2908
mov dword [ebp - 0x3c], ebx
mov dword [ebp - 0x34], ebx
mov dword [ebp - 0x40], eax
mov dword [ebp - 0x38], ebx
call dword [sym.imp.gdiplus.dll_GdiplusStartup]
test eax, eax
je 0x47dc22
cmp byte [0x4d289a], 0
jne 0x47dc0b
push 0x10
push 0x4abb10
push str.A_fatal_error_occured__the_setup_cannot_continue._nError_Code:_8007
push ebx
call dword [sym.imp.USER32.dll_MessageBoxW]
mov eax, 2
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push 0x44
mov dword [ebp - 4], 4
call fcn.004881ae
add esp, 4
mov dword [ebp - 0x24], eax
mov byte [ebp - 4], 5
cmp eax, ebx
je 0x47dc46
push eax
call fcn.004643e0
jmp 0x47dc48
xor eax, eax
push 0x38
mov dword [0x4d290c], eax
mov dword [ebp - 4], 7
call fcn.004881ae
add esp, 4
mov dword [ebp - 0x24], eax
mov byte [ebp - 4], 8
cmp eax, ebx
je 0x47dc71
push eax
call fcn.00446120
jmp 0x47dc73
xor eax, eax
mov dword [ebp - 4], esi
mov dword [0x4d2914], eax
cmp dword [0x4d290c], ebx
je 0x47e0ba
cmp eax, ebx
je 0x47e0ba
call fcn.004647d0
mov edx, dword [0x4d2d94]
mov dword [0x4d2920], eax
cmp dword [edx - 0xc], ebx
jne 0x47de09
mov dword [ebp - 0x30], ebx
mov dword [ebp - 0x2c], ebx
mov dword [ebp - 0x28], ebx
lea eax, [ebp - 0x1c]
push eax
mov dword [ebp - 4], 0xa
call fcn.0041b8b0
lea ecx, [ebp - 0x30]
push ecx
mov edx, 0x20019
mov eax, str.SOFTWAREPatchouMessenger_Plus__Live
mov ecx, reloc.OLEAUT32.dll_SysReAllocString
mov byte [ebp - 4], 0xb
call fcn.004191e0
test eax, eax
jne 0x47dd2c
lea edx, [ebp - 0x30]
push edx
mov ebx, 0x4d2d94
mov eax, str.AppDir
call fcn.0041d070
mov eax, dword [0x4d2d94]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, esi
jne 0x47dd2c
lea ecx, [ebp - 0x18]
push ecx
mov ecx, 0x4ab684
call fcn.0041be20
lea eax, [ebp - 0x18]
mov edi, ebx
mov byte [ebp - 4], 0xc
call fcn.00417620
lea eax, [ebp - 0x18]
mov byte [ebp - 4], 0xb
call fcn.0041b950
mov edx, dword [0x4d2d94]
cmp dword [edx - 0xc], 0
jne 0x47ddf4
mov eax, dword [edx - 8]
mov ecx, 1
sub ecx, dword [edx - 4]
sub eax, 0x400
or eax, ecx
jge 0x47dd65
mov eax, 0x400
mov ecx, 0x4d2d94
call fcn.00417470
mov edx, dword [0x4d2d94]
push edx
push 0
push 0
push 0x26
push 0
call dword [sym.imp.SHELL32.dll_SHGetFolderPathW]
mov eax, dword [0x4d2d94]
mov ecx, dword [eax - 8]
push ecx
push eax
call fcn.00489835
add esp, 8
test eax, eax
js 0x47dea9
mov ecx, dword [0x4d2d94]
cmp eax, dword [ecx - 8]
jg 0x47dea9
mov dword [ecx - 0xc], eax
mov ecx, dword [0x4d2d94]
xor edx, edx
mov word [ecx + eax*2], dx
mov edx, dword [0x4d2d94]
mov eax, dword [edx - 0xc]
test eax, eax
je 0x47dde5
lea ecx, [eax - 1]
test ecx, ecx
js 0x47dea9
cmp ecx, eax
jg 0x47dea9
cmp word [edx + ecx*2], 0x5c
jne 0x47dde5
lea ecx, [eax - 1]
push 0x4d2d94
mov eax, 1
call fcn.00418b70
mov edx, 0x4b1820
mov eax, 0x4d2d94
call fcn.00418b00
lea eax, [ebp - 0x1c]
call fcn.0041b950
lea esi, [ebp - 0x30]
call fcn.0041d1b0
or esi, 0xffffffff
xor ebx, ebx
mov byte [0x4d291d], 1
mov dword [ebp - 0x14], ebx
lea edi, [ebp - 0x14]
mov dword [ebp - 4], 0xd
call fcn.0045d1b0
test eax, eax
jns 0x47deb3
cmp byte [0x4d289a], 0
jne 0x47de8e
lea esi, [ebp - 0x18]
call fcn.0041b420
mov esi, eax
push str.XmlError
push str.Setup
lea edx, [ebp - 0x1c]
mov byte [ebp - 4], 0xe
mov ebx, dword [0x4d2918]
push edx
call fcn.0041b1b0
mov eax, dword [eax]
mov edx, dword [esi]
push eax
push 0
mov eax, 0x30
call fcn.0041b440
lea eax, [ebp - 0x1c]
call fcn.0041b950
lea eax, [ebp - 0x18]
mov byte [ebp - 4], 0xd
call fcn.0041b950
mov edi, str.http:__software.msgpluslive.net_getmsxml.php
call fcn.004188b0
or esi, 0xffffffff
xor ebx, ebx
mov dword [ebp - 4], esi
mov eax, dword [ebp - 0x14]
cmp eax, ebx
je 0x47e166
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
jmp 0x47e166
push 0x80070057
call fcn.00417580
mov eax, dword [ebp - 0x14]
cmp eax, ebx
jne 0x47dec4
push 0x80004003
call fcn.00487440
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
cmp byte [0x4d289a], 0
mov dword [ebp - 0x14], ebx
jne 0x47e08b
mov byte [ebp - 0x1c], 0
jmp 0x47dee4
xor ebx, ebx
push 0x3dc
call fcn.004881ae
add esp, 4
mov dword [ebp - 0x24], eax
mov byte [ebp - 4], 0xf
cmp eax, ebx
je 0x47df0a
mov ecx, dword [ebp - 0x1c]
push ecx
push eax
call fcn.00485250
mov edi, eax
jmp 0x47df0c
xor edi, edi
mov byte [ebp - 4], 0xd
mov edx, dword [0x4d2918]
movzx eax, byte [edx + 0xc]
neg eax
sbb eax, eax
and eax, 0x80
push eax
call dword [sym.imp.USER32.dll_GetDesktopWindow]
mov ecx, eax
mov esi, edi
call fcn.00468ba0
test al, al
jne 0x47df7f
cmp byte [0x4d289a], al
jne 0x47df52
push 0x10
push 0x4abb10
push str.A_fatal_error_occured__the_setup_cannot_continue._nError_Code:_8008
push ebx
call dword [sym.imp.USER32.dll_MessageBoxW]
mov dword [ebp - 4], 0xffffffff
mov eax, dword [ebp - 0x14]
cmp eax, ebx
je 0x47df68
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, 0xa
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push 0
push 0
push 0
lea eax, [ebp - 0x5c]
push eax
call dword [sym.imp.USER32.dll_GetMessageW]
test eax, eax
je 0x47e03b
mov bl, 1
cmp eax, 0xffffffff
je 0x47e03b
mov ecx, dword [ebp - 0x58]
add ecx, 0xffffff00
cmp ecx, 9
ja 0x47e022
cmp dword [0x4d2d58], 0
je 0x47e022
cmp byte [0x4d2e00], 0
jne 0x47e022
mov byte [ebp - 4], 0x10
mov ecx, dword [0x4d2d54]
mov eax, dword [ecx]
mov byte [0x4d2e00], bl
mov dword [ebp - 0x18], eax
mov esi, ecx
lea esp, [esp]
cmp eax, esi
je 0x47e00c
test bl, bl
je 0x47e00c
mov eax, dword [eax + 0xc]
mov ecx, dword [eax + 4]
lea edx, [ebp - 0x5c]
push edx
push ecx
call dword [sym.imp.USER32.dll_IsDialogMessageW]
test eax, eax
je 0x47dfff
xor bl, bl
lea eax, [ebp - 0x18]
call fcn.00475240
mov eax, dword [ebp - 0x18]
jmp 0x47dfe0
mov dword [ebp - 4], 0xd
mov byte [0x4d2e00], 0
test bl, bl
je 0x47df7f
lea edx, [ebp - 0x5c]
push edx
call dword [sym.imp.USER32.dll_TranslateMessage]
lea eax, [ebp - 0x5c]
push eax
call dword [sym.imp.USER32.dll_DispatchMessageW]
jmp 0x47df7f
mov ebx, dword [edi + 0xc0]
cmp ebx, 4
jne 0x47e04a
mov byte [ebp - 0x1c], 1
mov edx, dword [edi]
mov eax, dword [edx + 4]
push 1
mov ecx, edi
call eax
cmp ebx, 4
je 0x47dee2
mov dword [ebp - 4], 0xffffffff
mov eax, dword [ebp - 0x14]
test eax, eax
je 0x47e074
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, 1
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
xor ecx, ecx
call fcn.00478ce0
mov edi, eax
mov dword [ebp - 4], esi
mov eax, dword [ebp - 0x14]
cmp eax, ebx
je 0x47e0a6
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, edi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
cmp byte [0x4d289a], 0
jne 0x47e0d6
push 0x10
push 0x4abb10
push str.A_fatal_error_occured__the_setup_cannot_continue._nError_Code:_8006
push ebx
call dword [sym.imp.USER32.dll_MessageBoxW]
mov eax, 3
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
cmp byte [0x4d289a], 0
jne 0x47e166
push 0x10
push 0x4abb10
push str.A_fatal_error_occured__the_setup_cannot_continue._nError_Code:_8003
push ebx
call dword [sym.imp.USER32.dll_MessageBoxW]
mov eax, 4
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret