Function at 0x403860
Capabilities:
Get installed programs
Persist via contextmenuhandlers registry key
Set registry value

Disassembly:
sub esp, 0xd68
mov eax, dword [0x433448]
xor eax, esp
mov dword [esp + 0xd64], eax
push ebx
push ebp
push esi
push edi
push str.IsWow64Process
push 0x427894
mov dword [esp + 0x1c], 0
call dword [sym.imp.KERNEL32.dll_GetModuleHandleA]
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov esi, eax
test esi, esi
je 0x4038ab
lea eax, [esp + 0x14]
push eax
call dword [sym.imp.KERNEL32.dll_GetCurrentProcess]
push eax
call esi
xor eax, eax
cmp dword [esp + 0x14], eax
push 0x435920
setne al
inc eax
mov dword [esp + 0x28], eax
lea eax, [esp + 0x44]
push str._sgvim.exe
push eax
call fcn.00405500
mov ebx, dword [sym.imp.ADVAPI32.dll_RegCloseKey]
add esp, 0xc
cmp dword [0x433f34], 0
mov ebp, dword [sym.imp.ADVAPI32.dll_RegCreateKeyExA]
mov edi, dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
je 0x403bc7
push str.Creating__Edit_with_Vim__popup_menu_entry_n
call fcn.00404f50
add esp, 4
mov edx, str._sGvimExt32gvimext.dll
xor ecx, ecx
mov dword [esp + 0x20], ecx
nop word [eax + eax]
test ecx, ecx
mov eax, str._sGvimExt64gvimext.dll
push 0x435920
cmove eax, edx
push eax
lea eax, [esp + 0x14c]
push eax
call fcn.00405500
push str.51EEE242_AD87_11d3_9C1E_0090278BBD99
lea eax, [esp + 0x35c]
push str.CLSID_s
push eax
call fcn.00405500
add esp, 0x18
mov dword [esp + 0x18], 0
cmp dword [esp + 0x20], 0
mov eax, 0x100
mov esi, 0x200
cmovne esi, eax
lea eax, [esp + 0x3c]
push eax
lea eax, [esp + 0x1c]
or esi, 0x20006
push eax
push 0
push esi
push 0
push 0
push 0
lea eax, [esp + 0x368]
push eax
push 0x80000000
call ebp
test eax, eax
jne 0x403cf0
push 0x14
push str.Vim_Shell_Extension
push 1
push eax
push eax
push dword [esp + 0x2c]
call edi
push dword [esp + 0x18]
mov dword [esp + 0x18], eax
call ebx
mov eax, dword [esp + 0x14]
test eax, eax
jne 0x403cf0
push str.51EEE242_AD87_11d3_9C1E_0090278BBD99
lea eax, [esp + 0x350]
push str.CLSID_sInProcServer32
push eax
call fcn.00405500
add esp, 0xc
mov dword [esp + 0x1c], 0
lea eax, [esp + 0x30]
push eax
lea eax, [esp + 0x20]
push eax
push 0
push esi
push 0
push 0
push 0
lea eax, [esp + 0x368]
push eax
push 0x80000000
call ebp
test eax, eax
jne 0x403cf0
lea ecx, [esp + 0x144]
lea edx, [ecx + 1]
nop
mov al, byte [ecx]
inc ecx
test al, al
jne 0x403a10
sub ecx, edx
lea eax, [ecx + 1]
push eax
lea eax, [esp + 0x148]
push eax
push 1
push 0
push 0
push dword [esp + 0x30]
call edi
push dword [esp + 0x1c]
mov dword [esp + 0x18], eax
call ebx
mov eax, dword [esp + 0x14]
test eax, eax
jne 0x403cf0
mov dword [esp + 0x10], eax
lea eax, [esp + 0x34]
push eax
lea eax, [esp + 0x14]
push eax
push 0
push esi
push 0
push 0
push 0
lea eax, [esp + 0x368]
push eax
push 0x80000000
call ebp
mov edi, eax
test edi, edi
jne 0x403cf0
push 0xa
push str.Apartment
push 1
push eax
push str.ThreadingModel
push dword [esp + 0x24]
call dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
push dword [esp + 0x10]
mov edi, eax
call ebx
test edi, edi
jne 0x403cf0
lea eax, [esp + 0x38]
mov dword [esp + 0x10], edi
push eax
lea eax, [esp + 0x14]
push eax
push edi
push esi
push edi
push edi
push edi
push str._shellexContextMenuHandlersgvim
push 0x80000000
call ebp
mov edi, eax
test edi, edi
jne 0x403cf0
push 0x27
push str.51EEE242_AD87_11d3_9C1E_0090278BBD99
push 1
push eax
push eax
push dword [esp + 0x24]
call dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
push dword [esp + 0x10]
mov edi, eax
call ebx
test edi, edi
jne 0x403cf0
lea eax, [esp + 0x28]
mov dword [esp + 0x1c], edi
push eax
lea eax, [esp + 0x20]
push eax
push edi
push esi
push edi
push edi
push edi
push str.SoftwareMicrosoftWindowsCurrentVersionShell_ExtensionsApproved
push 0x80000002
call ebp
mov edi, eax
test edi, edi
jne 0x403cf0
push 0x14
push str.Vim_Shell_Extension
push 1
push eax
push str.51EEE242_AD87_11d3_9C1E_0090278BBD99
push dword [esp + 0x30]
call dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
push dword [esp + 0x1c]
mov edi, eax
call ebx
test edi, edi
jne 0x403cf0
lea eax, [esp + 0x2c]
mov dword [esp + 0x18], edi
push eax
lea eax, [esp + 0x1c]
push eax
push edi
push esi
push edi
push edi
push edi
push str.SoftwareVimGvim
push 0x80000002
call ebp
mov esi, eax
test esi, esi
jne 0x403ba1
lea ecx, [esp + 0x40]
lea edx, [ecx + 1]
nop dword [eax]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x403b70
mov edi, dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
sub ecx, edx
lea eax, [ecx + 1]
push eax
lea eax, [esp + 0x44]
push eax
push 1
push 0
push str.path
push dword [esp + 0x2c]
call edi
push dword [esp + 0x18]
mov esi, eax
call ebx
jmp 0x403ba7
mov edi, dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
test esi, esi
jne 0x403cf0
mov ecx, dword [esp + 0x20]
mov edx, str._sGvimExt32gvimext.dll
inc ecx
mov dword [esp + 0x20], ecx
cmp ecx, dword [esp + 0x24]
jl 0x403910
cmp dword [0x43475c], 0
je 0x403d2a
push str.Creating__Open_with_...__list_entry_n
call fcn.00404f50
add esp, 4
xor esi, esi
mov dword [esp + 0x14], esi
nop word [eax + eax]
lea eax, [esp + 0x40]
push eax
lea eax, [esp + 0x148]
push str.__s_____1_
push eax
call fcn.00405500
add esp, 0xc
mov dword [esp + 0x20], 0
test esi, esi
mov eax, 0x100
mov ebx, 0x200
cmovne ebx, eax
lea eax, [esp + 0x2c]
push eax
lea eax, [esp + 0x24]
or ebx, 0x20006
push eax
push 0
push ebx
push 0
push 0
push 0
push str.Applicationsgvim.exe_shelleditcommand
push 0x80000000
call ebp
mov esi, eax
test esi, esi
jne 0x403cf0
lea ecx, [esp + 0x144]
lea edx, [ecx + 1]
nop word [eax + eax]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x403c60
sub ecx, edx
lea eax, [ecx + 1]
push eax
lea eax, [esp + 0x148]
push eax
push 1
push 0
push 0
push dword [esp + 0x34]
call edi
push dword [esp + 0x20]
mov esi, eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
test esi, esi
jne 0x403cf0
mov esi, 0x43340c
cmp esi, 0x433418
jge 0x403d0b
lea eax, [esp + 0x28]
mov dword [esp + 0x10], 0
push eax
lea eax, [esp + 0x14]
push eax
push 0
push ebx
push 0
push 0
push 0
push dword [esi]
push 0x80000000
call ebp
mov edi, eax
test edi, edi
jne 0x403ce9
push 1
push 0x42731e
push 1
push eax
push eax
push dword [esp + 0x24]
call dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
push dword [esp + 0x10]
mov edi, eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
add esi, 4
test edi, edi
je 0x403c96
xor eax, eax
mov ecx, dword [esp + 0xd74]
pop edi
pop esi
pop ebp
pop ebx
xor ecx, esp
call fcn.004060bb
add esp, 0xd68
ret
mov esi, dword [esp + 0x14]
mov edi, dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
inc esi
mov dword [esp + 0x14], esi
cmp esi, dword [esp + 0x24]
jl 0x403bf0
mov ebx, dword [sym.imp.ADVAPI32.dll_RegCloseKey]
push str.Creating_an_uninstall_entry_n
call fcn.00404f50
lea eax, [esp + 0x558]
push str.Vim_9.0
push eax
call fcn.00405500
cmp dword [0x435a1c], 0
mov ecx, str._suninstall_gui.exe
mov eax, str._suninstall.exe
cmove eax, ecx
push 0x435920
push eax
lea eax, [esp + 0x770]
push eax
call fcn.00405500
push 0x435920
lea eax, [esp + 0x980]
push str._sgvim.exe_0
push eax
call fcn.00405500
lea eax, [esp + 0xb90]
push str.9.0.1959
push eax
call fcn.00405500
add esp, 0x2c
mov dword [esp + 0x20], 0
lea eax, [esp + 0x2c]
push eax
lea eax, [esp + 0x24]
push eax
push 0
push 0x20106
push 0
push 0
push 0
push str.SoftwareMicrosoftWindowsCurrentVersionUninstallVim_9.0
push 0x80000002
call ebp
mov esi, eax
test esi, esi
jne 0x403cf0
lea ecx, [esp + 0x554]
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x403dd8
sub ecx, edx
lea eax, [ecx + 1]
push eax
lea eax, [esp + 0x558]
push eax
push 1
push 0
push str.DisplayName
push dword [esp + 0x34]
call edi
push dword [esp + 0x20]
mov esi, eax
call ebx
test esi, esi
jne 0x403cf0
lea eax, [esp + 0x28]
mov dword [esp + 0x10], esi
push eax
lea eax, [esp + 0x14]
push eax
push esi
push 0x20106
push esi
push esi
push esi
push str.SoftwareMicrosoftWindowsCurrentVersionUninstallVim_9.0
push 0x80000002
call ebp
mov esi, eax
test esi, esi
jne 0x403cf0
lea ecx, [esp + 0x75c]
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x403e43
sub ecx, edx
lea eax, [ecx + 1]
push eax
lea eax, [esp + 0x760]
push eax
push 1
push 0
push str.UninstallString
push dword [esp + 0x24]
call edi
push dword [esp + 0x10]
mov esi, eax
call ebx
test esi, esi
jne 0x403cf0
lea eax, [esp + 0x38]
mov dword [esp + 0x1c], esi
push eax
lea eax, [esp + 0x20]
push eax
push esi
push 0x20106
push esi
push esi
push esi
push str.SoftwareMicrosoftWindowsCurrentVersionUninstallVim_9.0
push 0x80000002
call ebp
mov esi, eax
test esi, esi
jne 0x403cf0
lea ecx, [esp + 0x964]
lea edx, [ecx + 1]
nop
mov al, byte [ecx]
inc ecx
test al, al
jne 0x403eb0
sub ecx, edx
lea eax, [ecx + 1]
push eax
lea eax, [esp + 0x968]
push eax
push 1
push 0
push str.DisplayIcon
push dword [esp + 0x30]
call edi
push dword [esp + 0x1c]
mov esi, eax
call ebx
test esi, esi
jne 0x403cf0
lea eax, [esp + 0x34]
mov dword [esp + 0x18], esi
push eax
lea eax, [esp + 0x1c]
push eax
push esi
push 0x20106
push esi
push esi
push esi
push str.SoftwareMicrosoftWindowsCurrentVersionUninstallVim_9.0
push 0x80000002
call ebp
mov esi, eax
test esi, esi
jne 0x403cf0
lea ecx, [esp + 0xb6c]
lea edx, [ecx + 1]
nop dword [eax + eax]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x403f20
sub ecx, edx
lea eax, [ecx + 1]
push eax
lea eax, [esp + 0xb70]
push eax
push 1
push 0
push str.DisplayVersion
push dword [esp + 0x2c]
call edi
push dword [esp + 0x18]
mov esi, eax
call ebx
test esi, esi
jne 0x403cf0
lea eax, [esp + 0x30]
mov dword [esp + 0x14], esi
push eax
lea eax, [esp + 0x18]
push eax
push esi
push 0x20106
push esi
push esi
push esi
push str.SoftwareMicrosoftWindowsCurrentVersionUninstallVim_9.0
push 0x80000002
call ebp
mov esi, eax
test esi, esi
jne 0x403f9a
push 0x16
push str.Bram_Moolenaar_et_al.
push 1
push eax
push str.Publisher
push dword [esp + 0x28]
call edi
push dword [esp + 0x14]
mov esi, eax
call ebx
xor eax, eax
test esi, esi
sete al
jmp 0x403cf2