Function at 0x407420
Capabilities:
Create shortcut via ishelllink

Disassembly:
sub esp, 0x428
push ebx
push ebp
push esi
lea eax, [esp + 0xc]
push edi
push eax
push 0x420518
push 1
push 0
push 0x420528
mov dword [esp + 0x30], 0
call dword [sym.imp.ole32.dll_CoCreateInstance]
test eax, eax
jl 0x40770f
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.00418b20
add esp, 8
test eax, eax
je 0x4074ad
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 0x4074c8
cmp byte [eax], 0
je 0x4074c8
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 0x4074e3
test eax, eax
je 0x4074fa
cmp byte [eax], 0
je 0x4074fa
test eax, eax
je 0x4074ec
cmp byte [eax], 0
jne 0x4074ee
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 0x420538
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 0x407634
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 0x407626
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 0x40761e
mov eax, dword [esp + 0x20]
test eax, eax
je 0x40761e
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 0x4075bd
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.00418b20
mov ebx, eax
lea eax, [esp + 0x134]
push 0x2e
push eax
call fcn.00418b20
add esp, 0x10
mov edx, eax
test ebx, ebx
je 0x407626
test edx, edx
je 0x407626
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 0x407626
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 0x407626
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 0x40770d
push 0
push ebp
call fcn.00401040
add esp, 8
cmp eax, 0xffffffff
jne 0x407704
or ecx, eax
mov edi, ebp
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
sub ecx, 4
js 0x40770d
lea ebx, [ecx + ebp]
push str..lnk
push ebx
call fcn.004192a0
add esp, 8
test eax, eax
jne 0x40770d
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 0x4076d3
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