Function at 0x4042e0
Capabilities:
Get common file path

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x55ecfc
mov eax, dword fs:[0]
push eax
sub esp, 0x228
mov eax, dword [0x5befcc]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
push 0x5a1d68
lea ecx, [ebp - 0x214]
mov dword [ebp - 0x228], 0x100
call fcn.004027f0
mov dword [ebp - 4], 0
mov edx, 1
mov eax, dword [ebp - 0x214]
mov ecx, dword [eax - 8]
sub edx, dword [eax - 4]
sub ecx, 0x100
or ecx, edx
jge 0x404360
push 0x100
lea ecx, [ebp - 0x214]
call fcn.00402550
mov eax, dword [ebp - 0x214]
push eax
push dword [ebp - 0x228]
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryW]
or ebx, 0xffffffff
test eax, eax
je 0x4048eb
mov eax, dword [ebp - 0x214]
push dword [eax - 8]
push eax
call fcn.005493fa
mov edx, eax
add esp, 8
test edx, edx
js 0x404956
mov ecx, dword [ebp - 0x214]
cmp edx, dword [ecx - 8]
jg 0x404956
mov dword [ecx - 0xc], edx
mov edi, 0x5a207c
mov eax, dword [ebp - 0x214]
xor ecx, ecx
push 1
push 0x5a207c
mov word [eax + edx*2], cx
mov eax, dword [ebp - 0x214]
sub edi, eax
sar edi, 1
mov ebx, dword [eax - 0xc]
call fcn.005493fa
mov ecx, SysReAllocString
mov dword [ebp - 0x218], eax
sub ecx, eax
add esp, 8
cmp ecx, ebx
jl 0x404956
lea esi, [ebx + eax]
test esi, esi
js 0x404960
mov eax, dword [ebp - 0x214]
mov edx, 1
mov ecx, dword [eax - 8]
sub edx, dword [eax - 4]
sub ecx, esi
or ecx, edx
jge 0x40441c
push esi
lea ecx, [ebp - 0x214]
call fcn.00402550
mov eax, dword [ebp - 0x214]
lea ecx, [eax + edi*2]
cmp edi, ebx
jbe 0x404428
mov ecx, 0x5a207c
mov edx, dword [ebp - 0x218]
push edx
push ecx
lea ecx, [eax + ebx*2]
call fcn.004025b0
mov eax, dword [ebp - 0x214]
add esp, 8
cmp esi, dword [eax - 8]
jg 0x404956
mov dword [eax - 0xc], esi
xor ecx, ecx
mov eax, dword [ebp - 0x214]
mov edi, 0x5a1f68
push 9
push 0x5a1f68
mov word [eax + esi*2], cx
mov eax, dword [ebp - 0x214]
sub edi, eax
sar edi, 1
mov ebx, dword [eax - 0xc]
call fcn.005493fa
mov edx, eax
add esp, 8
mov eax, SysReAllocString
mov dword [ebp - 0x234], edx
sub eax, edx
cmp eax, ebx
jl 0x40496a
lea esi, [ebx + edx]
test esi, esi
js 0x404974
mov eax, dword [ebp - 0x214]
mov ecx, 1
sub ecx, dword [eax - 4]
mov dword [ebp - 0x218], ecx
mov ecx, dword [eax - 8]
sub ecx, esi
or ecx, dword [ebp - 0x218]
jge 0x4044d5
push esi
lea ecx, [ebp - 0x214]
call fcn.00402550
mov eax, dword [ebp - 0x214]
mov edx, dword [ebp - 0x234]
lea ecx, [eax + edi*2]
cmp edi, ebx
jbe 0x4044e1
mov ecx, 0x5a1f68
push edx
push ecx
lea ecx, [eax + ebx*2]
call fcn.004025b0
mov eax, dword [ebp - 0x214]
add esp, 8
cmp esi, dword [eax - 8]
jg 0x404956
mov dword [eax - 0xc], esi
xor ecx, ecx
mov eax, dword [ebp - 0x214]
mov word [eax + esi*2], cx
lea eax, [ebp - 0x224]
push eax
push ecx
push dword [ebp - 0x214]
mov dword [ebp - 0x224], ecx
call dword [sym.imp.msi.dll_MsiOpenProductW]
test eax, eax
jne 0x4048e8
push str.Select__From_Property
lea ecx, [ebp - 0x230]
mov dword [ebp - 0x21c], eax
call fcn.004027f0
lea eax, [ebp - 0x21c]
mov byte [ebp - 4], 1
push eax
push dword [ebp - 0x230]
push dword [ebp - 0x224]
call dword [sym.imp.msi.dll_MsiEnumClientsA]
test eax, eax
je 0x40457b
push dword [ebp - 0x224]
call dword [sym.imp.msi.dll_MsiConfigureFeatureFromDescriptorA]
xor esi, esi
or ebx, 0xffffffff
jmp 0x40489c
push 0
push dword [ebp - 0x21c]
call dword [sym.imp.msi.dll_MsiViewModify]
test eax, eax
je 0x4045ad
push dword [ebp - 0x21c]
mov esi, dword [sym.imp.msi.dll_MsiConfigureFeatureFromDescriptorA]
call esi
push dword [ebp - 0x224]
call esi
xor esi, esi
or ebx, 0xffffffff
jmp 0x40489c
push 0x5a204c
lea ecx, [ebp - 0x22c]
mov dword [ebp - 0x220], 0
call fcn.004027f0
lea eax, [ebp - 0x220]
mov byte [ebp - 4], 2
push eax
push dword [ebp - 0x21c]
call dword [sym.imp.msi.dll_MsiDatabaseIsTablePersistentA]
or ebx, 0xffffffff
test eax, eax
jne 0x4046f6
mov esi, dword [sym.imp.msi.dll_MsiRecordSetStreamA]
mov edi, dword [sym.imp.KERNEL32.dll_HeapFree]
push 0x5a204c
lea ecx, [ebp - 0x218]
mov dword [ebp - 0x228], 0x100
call fcn.004027f0
push 0x200
lea eax, [ebp - 0x210]
mov byte [ebp - 4], 3
push 0
push eax
call fcn.005436f0
add esp, 0xc
lea eax, [ebp - 0x228]
push eax
lea eax, [ebp - 0x210]
push eax
push 1
push dword [ebp - 0x220]
call esi
test eax, eax
jne 0x4047e1
lea ecx, [ebp - 0x210]
lea edx, [ecx + 2]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x404652
sub ecx, edx
lea eax, [ebp - 0x210]
sar ecx, 1
push ecx
push eax
lea ecx, [ebp - 0x218]
call fcn.00402660
push str.ProductCode
push dword [ebp - 0x218]
call fcn.005495aa
add esp, 8
test eax, eax
je 0x404739
mov byte [ebp - 4], 2
mov eax, ebx
mov ecx, dword [ebp - 0x218]
add ecx, 0xfffffff0
lock xadd dword [ecx + 0xc], eax
dec eax
test eax, eax
jg 0x4046db
mov edx, dword [ecx]
push ecx
mov eax, dword [edx]
mov esi, dword [eax + 4]
cmp eax, vtable.ATL::CAtlStringMgr.0
jne 0x40497e
mov edx, dword [edx + 4]
mov eax, dword [edx]
mov esi, dword [eax + 4]
cmp eax, vtable.ATL::CWin32Heap.0
jne 0x40497e
push 0
push dword [edx + 4]
call edi
mov esi, dword [sym.imp.msi.dll_MsiRecordSetStreamA]
lea eax, [ebp - 0x220]
push eax
push dword [ebp - 0x21c]
call dword [sym.imp.msi.dll_MsiDatabaseIsTablePersistentA]
test eax, eax
je 0x4045f5
push dword [ebp - 0x220]
mov esi, dword [sym.imp.msi.dll_MsiConfigureFeatureFromDescriptorA]
call esi
push dword [ebp - 0x21c]
call esi
push dword [ebp - 0x224]
call esi
push dword [ebp - 0x22c]
call dword [sym.imp.msi.dll_MsiRecordGetStringA]
cmp eax, 2
je 0x40484d
cmp eax, 5
je 0x40484d
xor esi, esi
jmp 0x404852
lea eax, [ebp - 0x228]
mov dword [ebp - 0x228], 0x100
push eax
lea eax, [ebp - 0x210]
push eax
push 2
push dword [ebp - 0x220]
call esi
test eax, eax
jne 0x4047e1
lea ecx, [ebp - 0x210]
lea edx, [ecx + 2]
nop dword [eax]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x404770
sub ecx, edx
lea eax, [ebp - 0x210]
sar ecx, 1
push ecx
push eax
lea ecx, [ebp - 0x22c]
call fcn.00402660
mov byte [ebp - 4], 2
mov eax, ebx
mov ecx, dword [ebp - 0x218]
add ecx, 0xfffffff0
lock xadd dword [ecx + 0xc], eax
dec eax
test eax, eax
jg 0x4046f6
mov edx, dword [ecx]
push ecx
mov eax, dword [edx]
mov esi, dword [eax + 4]
cmp eax, vtable.ATL::CAtlStringMgr.0
jne 0x404987
mov edx, dword [edx + 4]
mov eax, dword [edx]
mov esi, dword [eax + 4]
cmp eax, vtable.ATL::CWin32Heap.0
jne 0x404987
push 0
push dword [edx + 4]
call edi
jmp 0x4046f6
push dword [ebp - 0x220]
mov esi, dword [sym.imp.msi.dll_MsiConfigureFeatureFromDescriptorA]
call esi
push dword [ebp - 0x21c]
call esi
push dword [ebp - 0x224]
call esi
mov byte [ebp - 4], 2
mov eax, ebx
mov ecx, dword [ebp - 0x218]
add ecx, 0xfffffff0
lock xadd dword [ecx + 0xc], eax
dec eax
test eax, eax
jg 0x404849
mov edx, dword [ecx]
push ecx
mov eax, dword [edx]
mov esi, dword [eax + 4]
cmp eax, vtable.ATL::CAtlStringMgr.0
jne 0x404990
mov edx, dword [edx + 4]
mov eax, dword [edx]
mov esi, dword [eax + 4]
cmp eax, vtable.ATL::CWin32Heap.0
jne 0x404990
push 0
push dword [edx + 4]
call edi
xor esi, esi
jmp 0x404852
xor esi, esi
jmp 0x404852
mov esi, 1
mov byte [ebp - 4], 1
mov eax, ebx
mov ecx, dword [ebp - 0x22c]
add ecx, 0xfffffff0
lock xadd dword [ecx + 0xc], eax
dec eax
test eax, eax
jg 0x40489c
mov edx, dword [ecx]
push ecx
mov eax, dword [edx]
mov edi, dword [eax + 4]
cmp eax, vtable.ATL::CAtlStringMgr.0
jne 0x404999
mov edx, dword [edx + 4]
mov eax, dword [edx]
mov edi, dword [eax + 4]
cmp eax, vtable.ATL::CWin32Heap.0
jne 0x404999
push 0
push dword [edx + 4]
call dword [sym.imp.KERNEL32.dll_HeapFree]
mov byte [ebp - 4], 0
mov eax, ebx
mov ecx, dword [ebp - 0x230]
add ecx, 0xfffffff0
lock xadd dword [ecx + 0xc], eax
dec eax
test eax, eax
jg 0x4048ed
mov edx, dword [ecx]
push ecx
mov eax, dword [edx]
mov edi, dword [eax + 4]
cmp eax, vtable.ATL::CAtlStringMgr.0
jne 0x4049a2
mov edx, dword [edx + 4]
mov eax, dword [edx]
mov edi, dword [eax + 4]
cmp eax, vtable.ATL::CWin32Heap.0
jne 0x4049a2
push 0
push dword [edx + 4]
call dword [sym.imp.KERNEL32.dll_HeapFree]
jmp 0x4048ed
or ebx, 0xffffffff
xor esi, esi
mov dword [ebp - 4], 0xffffffff
mov ecx, dword [ebp - 0x214]
add ecx, 0xfffffff0
lock xadd dword [ecx + 0xc], ebx
dec ebx
test ebx, ebx
jg 0x404938
mov edx, dword [ecx]
push ecx
mov eax, dword [edx]
mov edi, dword [eax + 4]
cmp eax, vtable.ATL::CAtlStringMgr.0
jne 0x4049ab
mov edx, dword [edx + 4]
mov eax, dword [edx]
mov edi, dword [eax + 4]
cmp eax, vtable.ATL::CWin32Heap.0
jne 0x4049ab
push 0
push dword [edx + 4]
call dword [sym.imp.KERNEL32.dll_HeapFree]
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.00541176
mov esp, ebp
pop ebp
ret
push 0x80070057
call fcn.00402640
push 0x80070057
call fcn.00402640
push 0x80070057
call fcn.00402640
push 0x80070057
call fcn.00402640
mov ecx, edx
call esi
jmp 0x4046d5
mov ecx, edx
call esi
jmp 0x4046f6
mov ecx, edx
call esi
jmp 0x404849
mov ecx, edx
call edi
jmp 0x40489c
mov ecx, edx
call edi
jmp 0x4048ed
mov ecx, edx
call edi
jmp 0x404938