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

Disassembly:
push ebx
mov ebx, esp
sub esp, 8
and esp, 0xfffffff0
add esp, 4
push ebp
mov ebp, dword [ebx + 4]
mov dword [esp + 4], ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x450ad1
mov eax, dword fs:[0]
push eax
push ebx
sub esp, 0x330
mov eax, dword [0x45e008]
xor eax, ebp
mov dword [ebp - 0x14], eax
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov dword [ebp - 0x16c], 0
push 0
push 0x26
lea eax, [ebp - 0x120]
push eax
push 0
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathA]
test eax, eax
je 0x40cb64
xor ecx, ecx
mov byte [ebp - 0x16d], cl
xor edx, edx
mov byte [ebp - 0x16e], dl
xor eax, eax
mov byte [ebp - 0x16f], al
mov cl, byte [ebp - 0x16d]
mov byte [ebp - 0x180], cl
mov dl, byte [ebp - 0x16e]
mov byte [ebp - 0x184], dl
mov al, byte [ebp - 0x16f]
mov byte [ebp - 0x188], al
mov ecx, 0xa7201df8
mov dword [ebp - 0x1f8], 0x6f5830a9
mov dword [ebp - 0x1f4], ecx
mov edx, dword [ebp - 0x1f8]
mov eax, dword [ebp - 0x1f4]
mov dword [ebp - 0x240], edx
mov dword [ebp - 0x23c], eax
mov ecx, 0xada8594c
mov dword [ebp - 0x200], 0xe9188db4
mov dword [ebp - 0x1fc], ecx
mov edx, dword [ebp - 0x200]
mov eax, dword [ebp - 0x1fc]
mov dword [ebp - 0x238], edx
mov dword [ebp - 0x234], eax
lea ecx, [ebp - 0x240]
mov dword [ebp - 0x1a4], ecx
mov edx, 0xc8636f9d
mov dword [ebp - 0x150], 0x183760f5
mov dword [ebp - 0x14c], edx
mov eax, 0xada85920
mov dword [ebp - 0x148], 0x866af9da
mov dword [ebp - 0x144], eax
xor ecx, ecx
mov byte [ebp - 0x170], cl
mov dl, byte [ebp - 0x170]
mov byte [ebp - 0x18c], dl
movaps xmm0, xmmword [ebp - 0x150]
movaps xmmword [ebp - 0x2e0], xmm0
mov eax, dword [ebp - 0x1a4]
movups xmm0, xmmword [eax]
movaps xmmword [ebp - 0x2b0], xmm0
movaps xmm0, xmmword [ebp - 0x2b0]
pxor xmm0, xmmword [ebp - 0x2e0]
movaps xmmword [ebp - 0x270], xmm0
movaps xmm0, xmmword [ebp - 0x270]
mov ecx, dword [ebp - 0x1a4]
movups xmmword [ecx], xmm0
mov edx, dword [ebp - 0x1a4]
mov dword [ebp - 0x1c4], edx
mov eax, dword [ebp - 0x1c4]
push eax
lea ecx, [ebp - 0x320]
call fcn.00401810
mov dword [ebp - 0x1c8], eax
mov ecx, dword [ebp - 0x1c8]
mov dword [ebp - 0x230], ecx
mov dword [ebp - 4], 0
mov edx, dword [ebp - 0x230]
mov dword [ebp - 0x22c], edx
lea eax, [ebp - 0x120]
push eax
lea ecx, [ebp - 0x308]
call fcn.00401810
mov dword [ebp - 0x228], eax
mov ecx, dword [ebp - 0x228]
mov dword [ebp - 0x224], ecx
mov byte [ebp - 4], 1
mov edx, dword [ebp - 0x224]
mov dword [ebp - 0x1cc], edx
mov eax, dword [ebp - 0x22c]
push eax
mov ecx, dword [ebp - 0x1cc]
push ecx
movzx edx, byte [ebp - 0x18d]
push edx
lea ecx, [ebp - 0x168]
call fcn.00416630
mov eax, dword [ebp - 0x16c]
or eax, 2
mov dword [ebp - 0x16c], eax
mov byte [ebp - 4], 3
lea ecx, [ebp - 0x308]
call fcn.00401ab0
mov byte [ebp - 4], 4
lea ecx, [ebp - 0x320]
call fcn.00401ab0
lea ecx, [ebp - 0x168]
mov dword [ebp - 0x1a8], ecx
mov edx, dword [ebp - 0x1a8]
mov dword [ebp - 0x1b4], edx
mov eax, dword [ebp - 0x1a8]
cmp dword [eax + 0x14], 0x10
jb 0x40c78d
mov dword [ebp - 0x1b0], 1
jmp 0x40c797
mov dword [ebp - 0x1b0], 0
mov cl, byte [ebp - 0x1b0]
mov byte [ebp - 0x171], cl
movzx edx, byte [ebp - 0x171]
test edx, edx
je 0x40c7c8
mov eax, dword [ebp - 0x1a8]
mov ecx, dword [eax]
mov dword [ebp - 0x1d0], ecx
mov edx, dword [ebp - 0x1d0]
mov dword [ebp - 0x1b4], edx
mov eax, dword [ebp - 0x1b4]
mov dword [ebp - 0x1d4], eax
mov ecx, dword [ebp - 0x1d4]
mov dword [ebp - 0x1d8], ecx
mov edx, dword [ebp - 0x1d8]
push edx
call fcn.004038d0
add esp, 4
movzx eax, al
test eax, eax
jne 0x40c894
lea ecx, [ebp - 0x168]
mov dword [ebp - 0x1ac], ecx
mov edx, dword [ebp - 0x1ac]
mov dword [ebp - 0x1bc], edx
mov eax, dword [ebp - 0x1ac]
cmp dword [eax + 0x14], 0x10
jb 0x40c82a
mov dword [ebp - 0x1b8], 1
jmp 0x40c834
mov dword [ebp - 0x1b8], 0
mov cl, byte [ebp - 0x1b8]
mov byte [ebp - 0x172], cl
movzx edx, byte [ebp - 0x172]
test edx, edx
je 0x40c865
mov eax, dword [ebp - 0x1ac]
mov ecx, dword [eax]
mov dword [ebp - 0x1dc], ecx
mov edx, dword [ebp - 0x1dc]
mov dword [ebp - 0x1bc], edx
mov eax, dword [ebp - 0x1bc]
mov dword [ebp - 0x1e0], eax
mov ecx, dword [ebp - 0x1e0]
mov dword [ebp - 0x1e4], ecx
push 0
mov edx, dword [ebp - 0x1e4]
push edx
call dword [sym.imp.KERNEL32.dll_CreateDirectoryA]
test eax, eax
je 0x40cb52
movzx eax, byte [ebx + 0xc]
test eax, eax
jne 0x40c8d4
lea ecx, [ebp - 0x168]
push ecx
mov ecx, dword [ebx + 8]
call fcn.00412050
mov edx, dword [ebp - 0x16c]
or edx, 1
mov dword [ebp - 0x16c], edx
mov dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x168]
call fcn.00401ab0
mov eax, dword [ebx + 8]
jmp 0x40cb83
xor eax, eax
mov byte [ebp - 0x173], al
xor ecx, ecx
mov byte [ebp - 0x174], cl
xor edx, edx
mov byte [ebp - 0x176], dl
mov al, byte [ebp - 0x173]
mov byte [ebp - 0x194], al
mov cl, byte [ebp - 0x174]
mov byte [ebp - 0x198], cl
mov dl, byte [ebp - 0x176]
mov byte [ebp - 0x19c], dl
mov eax, 0xa7201df8
mov dword [ebp - 0x208], 0x6f5830a9
mov dword [ebp - 0x204], eax
mov ecx, dword [ebp - 0x208]
mov edx, dword [ebp - 0x204]
mov dword [ebp - 0x260], ecx
mov dword [ebp - 0x25c], edx
mov eax, 0xdbfb064c
mov dword [ebp - 0x210], 0xe9188db4
mov dword [ebp - 0x20c], eax
mov ecx, dword [ebp - 0x210]
mov edx, dword [ebp - 0x20c]
mov dword [ebp - 0x258], ecx
mov dword [ebp - 0x254], edx
mov eax, 0x935af582
mov dword [ebp - 0x218], 0xc1b484a4
mov dword [ebp - 0x214], eax
mov ecx, dword [ebp - 0x218]
mov edx, dword [ebp - 0x214]
mov dword [ebp - 0x250], ecx
mov dword [ebp - 0x24c], edx
mov eax, 0x65de1b42
mov dword [ebp - 0x220], 0x9e9b4684
mov dword [ebp - 0x21c], eax
mov ecx, dword [ebp - 0x220]
mov edx, dword [ebp - 0x21c]
mov dword [ebp - 0x248], ecx
mov dword [ebp - 0x244], edx
lea eax, [ebp - 0x260]
mov dword [ebp - 0x17c], eax
mov ecx, 0xc8636f9d
mov dword [ebp - 0x140], 0x183760f5
mov dword [ebp - 0x13c], ecx
mov edx, 0xada85920
mov dword [ebp - 0x138], 0x866af9da
mov dword [ebp - 0x134], edx
mov eax, 0x935af5e7
mov dword [ebp - 0x130], 0xb9d1aac7
mov dword [ebp - 0x12c], eax
mov ecx, 0x65de1b42
mov dword [ebp - 0x128], 0x9e9b4684
mov dword [ebp - 0x124], ecx
xor edx, edx
mov byte [ebp - 0x175], dl
mov al, byte [ebp - 0x175]
mov byte [ebp - 0x1a0], al
movaps xmm0, xmmword [ebp - 0x140]
movaps xmmword [ebp - 0x280], xmm0
mov ecx, dword [ebp - 0x17c]
movups xmm0, xmmword [ecx]
movaps xmmword [ebp - 0x2d0], xmm0
movaps xmm0, xmmword [ebp - 0x2d0]
pxor xmm0, xmmword [ebp - 0x280]
movaps xmmword [ebp - 0x290], xmm0
movaps xmm0, xmmword [ebp - 0x290]
mov edx, dword [ebp - 0x17c]
movups xmmword [edx], xmm0
mov eax, dword [ebp - 0x17c]
add eax, 0x10
mov dword [ebp - 0x1c0], eax
movaps xmm0, xmmword [ebp - 0x130]
movaps xmmword [ebp - 0x2f0], xmm0
mov ecx, dword [ebp - 0x1c0]
movups xmm0, xmmword [ecx]
movaps xmmword [ebp - 0x2a0], xmm0
movaps xmm0, xmmword [ebp - 0x2a0]
pxor xmm0, xmmword [ebp - 0x2f0]
movaps xmmword [ebp - 0x2c0], xmm0
movaps xmm0, xmmword [ebp - 0x2c0]
mov edx, dword [ebp - 0x1c0]
movups xmmword [edx], xmm0
mov eax, dword [ebp - 0x17c]
mov dword [ebp - 0x1e8], eax
mov ecx, dword [ebp - 0x1e8]
push ecx
lea ecx, [ebp - 0x338]
call fcn.00401810
mov dword [ebp - 0x1ec], eax
mov edx, dword [ebp - 0x1ec]
mov dword [ebp - 0x1f0], edx
mov byte [ebp - 4], 5
mov eax, dword [ebp - 0x1f0]
push eax
lea ecx, [ebp - 0x168]
push ecx
mov edx, dword [ebx + 8]
push edx
call fcn.00414290
add esp, 0xc
mov eax, dword [ebp - 0x16c]
or eax, 1
mov dword [ebp - 0x16c], eax
mov byte [ebp - 4], 4
lea ecx, [ebp - 0x338]
call fcn.00401ab0
mov dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x168]
call fcn.00401ab0
mov eax, dword [ebx + 8]
jmp 0x40cb83
mov dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x168]
call fcn.00401ab0
push 0x458daf
mov ecx, dword [ebx + 8]
call fcn.00401810
mov ecx, dword [ebp - 0x16c]
or ecx, 1
mov dword [ebp - 0x16c], ecx
mov eax, dword [ebx + 8]
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
mov ecx, dword [ebp - 0x14]
xor ecx, ebp
call fcn.00437b28
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret