Function at 0x40bad0
Capabilities:
Create shortcut via ishelllink

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x30c
push ebx
push esi
push edi
xor edi, edi
mov esi, ecx
cmp dword [ebp + 8], edi
je 0x40be27
mov ebx, dword [ebp + 0xc]
test ebx, ebx
je 0x40be27
mov eax, dword [esi + 4]
mov ecx, str.true
mov eax, dword [eax + 0x74]
nop
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x40bb20
test dl, dl
je 0x40bb1c
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x40bb20
add eax, 2
add ecx, 2
test dl, dl
jne 0x40bb00
xor eax, eax
jmp 0x40bb25
sbb eax, eax
or eax, 1
test eax, eax
je 0x40be27
push 0
push 0
push 0
push str.create_shortcut
mov ecx, 0x434b58
call fcn.00401900
test eax, eax
je 0x40bb58
push eax
push 0x403
push dword [esi + 0x138]
call dword [sym.imp.USER32.dll_SetDlgItemTextA]
push 0x1f4
call dword [sym.imp.KERNEL32.dll_Sleep]
lea eax, [ebp + 8]
push eax
push 0x42b780
push 1
push 0
push 0x42b7a0
call dword [sym.imp.ole32.dll_CoCreateInstance]
test eax, eax
js 0x40be1c
mov eax, dword [ebp + 0x18]
test eax, eax
je 0x40bbbd
lea edx, [ebp - 0x208]
mov ecx, eax
sub edx, eax
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [edx + ecx - 1], al
test al, al
jne 0x40bb94
lea edi, [ebp - 0x208]
dec edi
mov al, byte [edi + 1]
lea edi, [edi + 1]
test al, al
jne 0x40bba8
mov ax, word [0x42a618]
mov word [edi], ax
jmp 0x40bbc4
mov byte [ebp - 0x208], 0
xor ecx, ecx
mov al, byte [ebp + ecx - 0x208]
lea ecx, [ecx + 1]
mov byte [ebp + ecx - 0x30d], al
test al, al
jne 0x40bbc6
mov edx, ebx
mov esi, ebx
nop
mov al, byte [edx]
inc edx
test al, al
jne 0x40bbe0
lea edi, [ebp - 0x208]
sub edx, esi
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x40bbf0
mov ecx, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
mov edx, dword [ebp + 0x10]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
test edx, edx
je 0x40bc3b
mov esi, edx
nop
mov al, byte [edx]
inc edx
test al, al
jne 0x40bc10
lea edi, [ebp - 0x30c]
sub edx, esi
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x40bc20
mov ecx, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
jmp 0x40bcd5
mov esi, ebx
nop dword [eax]
mov al, byte [ebx]
inc ebx
test al, al
jne 0x40bc40
lea edi, [ebp - 0x30c]
sub ebx, esi
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x40bc50
mov ecx, ebx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
xor ecx, ecx
nop dword [eax + eax]
mov al, byte [ebp + ecx - 0x30c]
lea ecx, [ecx + 1]
mov byte [ebp + ecx - 0x105], al
test al, al
jne 0x40bc70
lea ecx, [ebp - 0x104]
dec ecx
nop dword [eax]
mov al, byte [ecx + 1]
lea ecx, [ecx + 1]
test al, al
jne 0x40bc90
mov eax, dword [str..ico]
mov dword [ecx], eax
mov al, byte [0x42aef0]
mov byte [ecx + 4], al
lea eax, [ebp - 0x104]
push 0
push eax
call fcn.00416b06
add esp, 8
test eax, eax
jne 0x40bcd5
xor ecx, ecx
mov al, byte [ebp + ecx - 0x104]
lea ecx, [ecx + 1]
mov byte [ebp + ecx - 0x30d], al
test al, al
jne 0x40bcc0
mov eax, dword [ebp + 8]
lea edx, [ebp - 0x208]
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x50]
mov edx, dword [ebp + 0x1c]
test edx, edx
je 0x40bcf6
mov eax, dword [ebp + 8]
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x2c]
mov edx, dword [ebp + 0x24]
test edx, edx
je 0x40bd07
mov eax, dword [ebp + 8]
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x1c]
mov edx, dword [ebp + 0x18]
test edx, edx
je 0x40bd18
mov eax, dword [ebp + 8]
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x24]
mov eax, dword [ebp + 8]
lea edx, [ebp - 0x30c]
push 0
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x44]
mov eax, dword [ebp + 8]
lea edx, [ebp + 0xc]
push edx
push 0x42b790
push eax
mov ecx, dword [eax]
call dword [ecx]
test eax, eax
js 0x40be11
mov ecx, dword [ebp + 0x28]
lea edx, [ebp - 0x104]
sub edx, ecx
nop
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [edx + ecx - 1], al
test al, al
jne 0x40bd50
lea edi, [ebp - 0x104]
dec edi
mov al, byte [edi + 1]
lea edi, [edi + 1]
test al, al
jne 0x40bd64
mov ax, word [0x42a618]
lea ecx, [ebp - 0x104]
mov word [edi], ax
dec ecx
nop
mov al, byte [ecx + 1]
lea ecx, [ecx + 1]
test al, al
jne 0x40bd80
mov eax, dword [str.Uninstall]
lea edx, [ebp - 0x104]
mov dword [ecx], eax
dec edx
mov eax, dword [0x42af0c]
mov dword [ecx + 4], eax
mov ax, word [0x42af10]
mov word [ecx + 8], ax
nop word [eax + eax]
mov al, byte [edx + 1]
lea edx, [edx + 1]
test al, al
jne 0x40bdb0
mov eax, dword [str..lnk]
mov ecx, 0x434b58
mov dword [edx], eax
mov al, byte [0x42aef8]
mov byte [edx + 4], al
mov eax, dword [ebp + 0xc]
push 1
mov esi, dword [eax]
lea eax, [ebp - 0x104]
push eax
call fcn.0040c080
push eax
push dword [ebp + 0xc]
call dword [esi + 0x18]
xor edi, edi
mov ecx, 1
test eax, eax
mov eax, dword [ebp + 0xc]
push eax
cmove edi, ecx
mov ecx, dword [eax]
call dword [ecx + 8]
mov ecx, dword [ebp + 8]
push ecx
mov edx, dword [ecx]
call dword [edx + 8]
mov eax, edi
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x24
mov ecx, dword [ebp + 8]
xor edi, edi
push ecx
mov edx, dword [ecx]
call dword [edx + 8]
mov eax, edi
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x24
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x24