Function at 0x406710
Capabilities:
Create shortcut via ishelllink
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x2bc
mov eax, dword [section..data]
xor eax, esp
mov dword [esp + 0x2b8], eax
push ebx
push esi
push edi
push 6
push 0
call dword [sym.imp.ole32.dll_CoInitializeEx]
mov edx, dword fs:[0x18]
sub esp, 8
mov edx, dword [edx + 0x30]
mov edx, dword [edx + 8]
call fcn.00418eb0
test eax, eax
jns 0x40676c
mov eax, 1
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x2b8]
xor ecx, esp
call fcn.00429cdd
mov esp, ebp
pop ebp
ret 0x10
push 0xa
push 0x413e50
mov edx, 0x413e20
mov ecx, 0xc
call fcn.004131e0
push 0
mov dword [0x4549dc], eax
call dword [sym.imp.USER32.dll_GetDC]
mov esi, eax
test esi, esi
je 0x4067ac
push 0x5a
push esi
call dword [sym.imp.GDI32.dll_GetDeviceCaps]
push esi
push 0
mov dword [0x453a4c], eax
call dword [sym.imp.USER32.dll_ReleaseDC]
mov esi, dword [sym.imp.KERNEL32.dll_LoadLibraryW]
push str.shell32.dll
call esi
push str.shlwapi.dll
mov ebx, eax
call esi
cmp dword [0x454e4c], 0x3e
mov esi, dword [sym.imp.ntdll.dll_LdrGetProcedureAddress]
mov edi, dword [sym.imp.ntdll.dll_LdrGetDllHandle]
mov dword [esp + 0xc], eax
jb 0x406832
lea eax, [esp + 0x18]
mov dword [esp + 0x20], 0x160014
push eax
lea eax, [esp + 0x24]
mov dword [esp + 0x28], str.user32.dll
push eax
push 0
push 0
call edi
test eax, eax
js 0x406832
mov eax, dword [esp + 0x18]
test eax, eax
je 0x406832
lea ecx, [esp + 0x88]
mov dword [esp + 0x90], 0x130012
push ecx
push 0
lea ecx, [esp + 0x98]
mov dword [esp + 0x9c], str.IsImmersiveProcess
push ecx
push eax
call esi
lea eax, [esp + 0x8c]
push eax
push 0x3d
push 0
push ebx
call esi
lea eax, [esp + 0x68]
mov dword [esp + 0x98], 0xf000e
push eax
push 0
lea eax, [esp + 0xa0]
mov dword [esp + 0xa4], str.SHAutoComplete
push eax
push dword [esp + 0x18]
call esi
push 0x100
push 0x414030
mov edx, 0x414010
mov ecx, 0x1c
call fcn.004131e0
mov edx, dword [0x454e88]
mov ecx, 0xc
mov dword [0x454e84], eax
call fcn.00411890
push 0x10
mov esi, eax
push 4
push dword [0x454e50]
mov dword [esi], 0
mov dword [esi + 4], 4
call dword [sym.imp.ntdll.dll_RtlAllocateHeap]
push 0x453920
mov edx, 0x4538c8
mov dword [esi + 8], eax
mov ecx, 1
mov dword [0x454e80], esi
call fcn.00415090
push 0x453930
mov edx, 0x4538b8
xor ecx, ecx
call fcn.00415090
push 0x453978
mov edx, 0x453958
mov ecx, 1
call fcn.00415090
push 0x4538d0
mov edx, 0x453960
xor ecx, ecx
call fcn.00415090
push 0x4538b0
mov edx, 0x453968
mov ecx, 2
call fcn.00415090
push 0x453948
mov edx, 0x453908
mov ecx, 3
call fcn.00415090
push 0x4538c0
mov edx, 0x453988
xor ecx, ecx
call fcn.00415090
push 0x453950
mov edx, 0x453918
xor ecx, ecx
call fcn.00415090
push 0x4538e8
mov edx, 0x4538e0
xor ecx, ecx
call fcn.00415090
push 0x453910
mov edx, 0x453980
xor ecx, ecx
call fcn.00415090
push 0x453900
mov edx, 0x453940
xor ecx, ecx
call fcn.00415090
push 0x4538f8
mov edx, 0x453938
xor ecx, ecx
call fcn.00415090
push 0x453928
mov edx, 0x453970
xor ecx, ecx
call fcn.00415090
push 0x4538f0
mov edx, 0x4538d8
xor ecx, ecx
call fcn.00415090
call fcn.00410000
mov edx, dword [0x4549b4]
mov ecx, 0x28
call fcn.00411890
mov esi, eax
mov edx, 1
xor eax, eax
mov word [esi], ax
lock xadd dword [0x4549b8], edx
inc edx
dec dl
mov dword [esi + 4], eax
movzx eax, dl
mov ecx, 0x28
mov byte [esi + 2], dl
mov edx, dword [0x4549b4]
mov dword [esi + 8], 0x40e000
mov dword [esi + 0xc], str.PvPropContext
mov dword [eax*4 + 0x454ea0], esi
mov dword [0x4552c0], esi
call fcn.00411890
mov edx, eax
mov ecx, 1
xor eax, eax
mov word [edx], ax
lock xadd dword [0x4549b8], ecx
inc ecx
dec cl
mov dword [edx + 4], eax
movzx eax, cl
push 0x2c
push 0
mov byte [edx + 2], cl
mov dword [eax*4 + 0x454ea0], edx
lea eax, [esp + 0x3c]
push eax
mov dword [edx + 8], 0x40e6e0
mov dword [edx + 0xc], str.PvPropPageContext
mov dword [0x4552c4], edx
mov dword [esp + 0x3c], 0x30
call fcn.0042b2e0
mov eax, dword [0x454e54]
add esp, 0xc
mov dword [esp + 0x34], 0x4008
mov dword [esp + 0x38], 0x41adf0
mov dword [esp + 0x3c], 0
push 0x7f00
push 0
mov dword [esp + 0x48], 4
mov dword [esp + 0x4c], eax
mov dword [esp + 0x50], 0
call dword [sym.imp.USER32.dll_LoadCursorW]
mov dword [esp + 0x4c], eax
lea eax, [esp + 0x30]
push eax
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
mov dword [esp + 0x5c], 0x44f248
mov dword [esp + 0x60], 0
call dword [sym.imp.USER32.dll_RegisterClassExW]
test ax, ax
je 0x406b29
lea eax, [esp + 0x10]
mov dword [esp + 0x28], 0x1a0018
push eax
lea eax, [esp + 0x2c]
mov dword [esp + 0x30], str.comctl32.dll
push eax
push 0
push 0
call edi
mov esi, dword [sym.imp.USER32.dll_GetSystemMetrics]
xor ecx, ecx
test eax, eax
push 0x31
cmovns ecx, dword [esp + 0x14]
mov dword [0x454aec], ecx
call esi
push 0x32
mov dword [0x454bc0], eax
call esi
mov dword [0x454bc4], eax
cmp dword [0x454e4c], 0x3f
mov ebx, dword [sym.imp.ntdll.dll_RtlFreeHeap]
mov dword [str.Application], 0x44c86c
jb 0x406bd2
lea eax, [esp + 0x14]
mov edx, 0x3c
push eax
call fcn.00419ea0
mov edi, eax
mov dword [esp + 0xc], edi
test edi, edi
js 0x406bd2
mov eax, dword [esp + 0x14]
movzx ecx, word [eax]
test cx, cx
jne 0x406b82
call fcn.00412420
push dword [esp + 0x14]
mov esi, eax
push 0
push dword [0x454e50]
call ebx
jmp 0x406be2
mov eax, dword [eax + 4]
mov edi, ecx
mov edx, dword [0x454e8c]
mov dword [esp + 0x10], eax
lea ecx, [edi + 0xa]
call fcn.00411890
mov esi, eax
xor ecx, ecx
lea eax, [esi + 8]
mov dword [esi + 4], eax
mov dword [esi], edi
mov word [edi + eax], cx
mov eax, dword [esp + 0x10]
test eax, eax
je 0x406bbe
push edi
push eax
push dword [esi + 4]
call fcn.00441e40
add esp, 0xc
push dword [esp + 0x14]
mov edi, dword [esp + 0x10]
push 0
push dword [0x454e50]
call ebx
jmp 0x406be2
lea ecx, [esp + 0x6c]
push ecx
call fcn.00419f30
mov esi, dword [esp + 0x6c]
mov edi, eax
test edi, edi
js 0x406750
sub esp, 0x10
mov ecx, esi
call fcn.00418b10
lea ecx, [esi - 8]
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x406c07
call fcn.00411970
mov edi, dword [0x454968]
mov esi, dword [sym.imp.ole32.dll_CoCreateInstance]
test edi, edi
jne 0x406d2e
push 6
push 0
call dword [sym.imp.ole32.dll_CoInitializeEx]
lea eax, [esp + 0x1c]
push eax
push 0x445550
push 1
push 0
push 0x445560
call esi
test eax, eax
js 0x406c6f
mov edi, dword [esp + 0x1c]
push 8
push 4
push dword [0x454e50]
call dword [sym.imp.ntdll.dll_RtlAllocateHeap]
mov esi, eax
mov byte [esi + 1], 0
test edi, edi
je 0x406c64
mov byte [esi], 1
mov dword [esi + 4], edi
jmp 0x406c71
push 0xc000000d
call dword [sym.imp.ntdll.dll_RtlRaiseStatus]
xor esi, esi
push ecx
mov ecx, esi
call fcn.00418590
cmp byte [esi], 0
mov ecx, dword [esi + 4]
je 0x406ca2
mov eax, dword [ecx]
push 0x44bb98
push ecx
mov eax, dword [eax + 0x58]
call eax
mov eax, dword [esi + 4]
push 0
push eax
mov ecx, dword [eax]
mov eax, dword [ecx + 0xc]
call eax
test eax, eax
setns al
jmp 0x406cbe
mov dword [ecx + 4], 0
cmp byte [esi + 1], 0
push ecx
jne 0x406cb8
call dword [sym.imp.COMDLG32.dll_GetOpenFileNameW]
jmp 0x406cbe
call dword [sym.imp.COMDLG32.dll_GetSaveFileNameW]
test al, al
je 0x406cce
mov ecx, esi
call fcn.00418770
mov dword [0x454968], eax
cmp byte [esi], 0
mov edi, dword [esi + 4]
je 0x406ce0
mov eax, dword [edi]
push edi
mov eax, dword [eax + 8]
call eax
jmp 0x406d0f
mov eax, dword [edi + 0xc]
test eax, eax
je 0x406cf2
push eax
push 0
push dword [0x454e50]
call ebx
mov eax, dword [edi + 0x1c]
test eax, eax
je 0x406d04
push eax
push 0
push dword [0x454e50]
call ebx
push edi
push 0
push dword [0x454e50]
call ebx
push esi
push 0
push dword [0x454e50]
call ebx
mov edi, dword [0x454968]
test edi, edi
je 0x406750
mov esi, dword [sym.imp.ole32.dll_CoCreateInstance]
mov ecx, dword [edi]
mov dword [esp + 0xa0], 8
mov dword [esp + 0xa4], str..lnk
cmp ecx, 8
jb 0x406e99
mov eax, dword [edi + 4]
lea edx, [esp + 0xa0]
add ecx, 0xfffffff8
mov dword [esp + 0x70], 8
add eax, ecx
lea ecx, [esp + 0x70]
push 1
mov dword [esp + 0x78], eax
call fcn.00411fa0
test al, al
je 0x406e93
mov ebx, dword [0x454968]
lea eax, [esp + 0x60]
push eax
push 0x4537f4
push 1
xor edi, edi
push edi
push 0x4537e4
call esi
test eax, eax
js 0x406e93
mov eax, dword [esp + 0x60]
lea edx, [esp + 0x64]
push edx
push 0x4537d4
push eax
mov ecx, dword [eax]
mov eax, dword [ecx]
call eax
test eax, eax
js 0x406e61
mov eax, dword [esp + 0x64]
push edi
push dword [ebx + 4]
mov ecx, dword [eax]
push eax
mov eax, dword [ecx + 0x14]
call eax
test eax, eax
js 0x406e55
mov eax, dword [esp + 0x60]
push 1
push edi
push eax
mov ecx, dword [eax]
mov eax, dword [ecx + 0x4c]
call eax
test eax, eax
js 0x406e55
mov eax, dword [esp + 0x60]
lea edx, [esp + 0xb8]
push edi
push edi
push 0x104
mov ecx, dword [eax]
push edx
push eax
mov eax, dword [ecx + 0xc]
call eax
test eax, eax
js 0x406e55
lea esi, [esp + 0xb8]
lea ecx, [esi + 2]
mov ax, word [esi]
add esi, 2
test ax, ax
jne 0x406e12
mov edx, dword [0x454e8c]
sub esi, ecx
sar esi, 1
add esi, esi
lea ecx, [esi + 0xa]
call fcn.00411890
mov edi, eax
xor ecx, ecx
lea eax, [edi + 8]
push esi
mov dword [edi + 4], eax
mov dword [edi], esi
mov word [esi + eax], cx
lea eax, [esp + 0xbc]
push eax
push dword [edi + 4]
call fcn.00441e40
add esp, 0xc
mov eax, dword [esp + 0x64]
push eax
mov ecx, dword [eax]
mov eax, dword [ecx + 8]
call eax
mov eax, dword [esp + 0x60]
push eax
mov ecx, dword [eax]
mov eax, dword [ecx + 8]
call eax
test edi, edi
je 0x406e93
mov eax, dword [0x454968]
mov dword [0x454968], edi
test eax, eax
je 0x406e99
lea ecx, [eax - 8]
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x406e93
call fcn.00411970
mov edi, dword [0x454968]
mov ecx, dword [edi]
mov dword [esp + 0xa8], 8
mov dword [esp + 0xac], str..lib
cmp ecx, 8
jb 0x406ef3
mov eax, dword [edi + 4]
lea edx, [esp + 0xa8]
add ecx, 0xfffffff8
mov dword [esp + 0x78], 8
add eax, ecx
lea ecx, [esp + 0x78]
push 1
mov dword [esp + 0x80], eax
call fcn.00411fa0
test al, al
je 0x406eed
call fcn.00405e30
jmp 0x406f88
mov edi, dword [0x454968]
mov ecx, dword [edi]
mov dword [esp + 0xb0], 8
mov dword [esp + 0xb4], str..pdb
cmp ecx, 8
jb 0x406f50
mov eax, dword [edi + 4]
lea edx, [esp + 0xb0]
add ecx, 0xfffffff8
mov dword [esp + 0x80], 8
add eax, ecx
lea ecx, [esp + 0x80]
push 1
mov dword [esp + 0x88], eax
call fcn.00411fa0
test al, al
je 0x406f4a
call fcn.0040ba40
jmp 0x406f88
mov edi, dword [0x454968]
push 0x4552e0
push ecx
mov ecx, dword [edi + 4]
call fcn.00410420
test eax, eax
js 0x406f7c
movzx eax, word [0x4552e0]
cmp eax, 0x457f
je 0x406fc8
cmp eax, 0x5a4d
je 0x406fb3
mov eax, 0xc00001a3
push ecx
push eax
mov edx, str.Unable_to_load_the_file.
call fcn.00417980
mov ecx, dword [0x4549ac]
test ecx, ecx
je 0x406f9a
mov ecx, dword [ecx + 4]
call fcn.00414dc0
mov ecx, dword [esp + 0x2c4]
xor eax, eax
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.00429cdd
mov esp, ebp
pop ebp
ret 0x10
call fcn.0040bb90
push dword [0x4552e4]
push 0xffffffffffffffff
call dword [sym.imp.ntdll.dll_NtUnmapViewOfSection]
jmp 0x406f88
call fcn.00403320
push dword [0x4552e4]
push 0xffffffffffffffff
call dword [sym.imp.ntdll.dll_NtUnmapViewOfSection]
jmp 0x406f88