Function at 0x407580
Capabilities:
Create shortcut via ishelllink

Disassembly:
sub esp, 0x428
push ebx
push ebp
push esi
lea eax, [esp + 0xc]
push edi
push eax
push 0x420520
push 1
push 0
push 0x420530
mov dword [esp + 0x30], 0
call dword [sym.imp.ole32.dll_CoCreateInstance]
test eax, eax
jl 0x40786f
mov eax, dword [esp + 0x10]
mov ebx, dword [esp + 0x43c]
push ebx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x50]
mov edi, ebx
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x28]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
push 0x5c
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x2c]
push ecx
call fcn.00418f20
add esp, 8
test eax, eax
je 0x40760d
mov byte [eax], 0
mov eax, dword [esp + 0x10]
lea ecx, [esp + 0x28]
mov edx, dword [eax]
push ecx
push eax
call dword [edx + 0x24]
mov eax, dword [esp + 0x444]
test eax, eax
je 0x407628
cmp byte [eax], 0
je 0x407628
mov ecx, dword [esp + 0x10]
push eax
push ecx
mov edx, dword [ecx]
call dword [edx + 0x2c]
mov edx, dword [esp + 0x44c]
mov eax, dword [esp + 0x448]
test edx, edx
jne 0x407643
test eax, eax
je 0x40765a
cmp byte [eax], 0
je 0x40765a
test eax, eax
je 0x40764c
cmp byte [eax], 0
jne 0x40764e
mov eax, ebx
mov ecx, dword [esp + 0x10]
push edx
push eax
push ecx
mov esi, dword [ecx]
call dword [esi + 0x44]
mov eax, dword [esp + 0x10]
lea edx, [esp + 0x18]
push edx
push 0x420540
mov ecx, dword [eax]
push eax
call dword [ecx]
mov ebp, dword [esp + 0x440]
mov esi, eax
test esi, esi
mov dword [esp + 0x14], esi
jl 0x407794
lea eax, [esp + 0x230]
push 0x104
push eax
push 0xffffffffffffffff
push ebp
push 0
push 0
call dword [sym.imp.KERNEL32.dll_MultiByteToWideChar]
mov eax, dword [esp + 0x18]
lea edx, [esp + 0x230]
push 1
push edx
mov ecx, dword [eax]
push eax
call dword [ecx + 0x18]
test eax, eax
mov dword [esp + 0x14], eax
jl 0x407786
mov eax, dword [esp + 0x18]
lea edx, [esp + 0x20]
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x20]
test eax, eax
jl 0x40777e
mov eax, dword [esp + 0x20]
test eax, eax
je 0x40777e
push 0
push 0
lea ecx, [esp + 0x134]
push 0x104
push ecx
push 0xffffffffffffffff
push eax
push 0
push 0
call dword [sym.imp.KERNEL32.dll_WideCharToMultiByte]
lea edx, [esp + 0x24]
push edx
push 1
call dword [sym.imp.ole32.dll_CoGetMalloc]
test eax, eax
jl 0x40771d
mov eax, dword [esp + 0x24]
mov edx, dword [esp + 0x20]
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x14]
push 0x2e
push ebp
call fcn.00418f20
mov ebx, eax
lea eax, [esp + 0x134]
push 0x2e
push eax
call fcn.00418f20
add esp, 0x10
mov edx, eax
test ebx, ebx
je 0x407786
test edx, edx
je 0x407786
mov edi, edx
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov edi, ebx
mov esi, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
dec ecx
cmp esi, ecx
ja 0x407786
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov edx, ecx
mov esi, edi
mov edi, ebx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
jmp 0x407786
mov dword [esp + 0x1c], 1
mov eax, dword [esp + 0x18]
push eax
mov ecx, dword [eax]
call dword [ecx + 8]
mov esi, dword [esp + 0x14]
mov eax, dword [esp + 0x10]
push eax
mov edx, dword [eax]
call dword [edx + 8]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x40786d
push 0
push ebp
call fcn.00401040
add esp, 8
cmp eax, 0xffffffff
jne 0x407864
or ecx, eax
mov edi, ebp
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
sub ecx, 4
js 0x40786d
lea ebx, [ecx + ebp]
push str..lnk
push ebx
call fcn.004196a0
add esp, 8
test eax, eax
jne 0x40786d
mov edi, str..pif
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
push 0
mov eax, ecx
mov esi, edi
mov edi, ebx
push ebp
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
call fcn.00401040
add esp, 8
cmp eax, 0xffffffff
je 0x407833
push eax
call fcn.004012c0
mov eax, dword [esp + 0x18]
add esp, 4
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x428
ret
mov edi, str..lnk
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, dword [esp + 0x14]
mov edx, ecx
mov esi, edi
mov edi, ebx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x428
ret
push eax
call fcn.004012c0
add esp, 4
mov eax, esi
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x428
ret