Function at 0x404520
Capabilities:
Check if file exists
Get file attributes

Disassembly:
push edi
lea ecx, [edx + 0x10]
lea edi, [esp + 8]
and esp, 0xfffffff0
movd xmm1, ecx
push dword [edi - 4]
push ebp
punpckldq xmm1, xmm1
mov ebp, esp
push edi
lea edi, [edx + 8]
push esi
movd xmm0, edi
mov esi, eax
push ebx
lea ebx, [edx + 0x18]
punpckldq xmm0, xmm0
punpcklqdq xmm0, xmm1
sub esp, 0x4f0
movups xmmword [edx + 8], xmm0
movd xmm0, ebx
mov dword [ebp - 0x4c0], edx
punpckldq xmm0, xmm0
mov dword [ebp - 0x4bc], edi
mov dword [ebp - 0x4c4], ecx
mov dword [ebp - 0x4c8], ebx
movq qword [edx + 0x18], xmm0
mov dword [esp], 0
call dword [sym.imp.ole32.dll_CoInitialize]
sub esp, 4
test byte [section..data], 8
jne 0x404980
mov eax, dword [ebp - 0x4c0]
call fcn.00401040
mov dword [ebp - 0x4cc], 0
mov edi, eax
test eax, eax
je 0x40469a
mov edx, eax
mov eax, esi
call fcn.00401290
test eax, eax
jne 0x4046b0
test byte [section..data], 2
jne 0x404a08
mov dword [ebp - 0x4cc], 0
mov eax, dword [ebp - 0x4c0]
mov ebx, dword [sym.imp.ucrtbase.dll_free]
mov esi, dword [eax + 8]
mov edi, dword [esi]
cmp dword [ebp - 0x4bc], esi
je 0x40462b
lea esi, [esi]
mov eax, dword [esi + 4]
mov dword [edi + 4], eax
mov ecx, dword [esi]
mov dword [eax], ecx
mov eax, dword [esi + 8]
call fcn.00401f60
mov eax, dword [esi + 8]
mov dword [esp], eax
call ebx
mov dword [esp], esi
mov esi, edi
call ebx
mov edi, dword [edi]
cmp dword [ebp - 0x4bc], esi
jne 0x404600
mov eax, dword [ebp - 0x4c0]
mov ebx, dword [ebp - 0x4c4]
mov eax, dword [eax + 0x10]
mov esi, dword [eax]
cmp dword [ebp - 0x4c4], eax
je 0x404662
lea esi, [esi]
mov edx, dword [eax + 4]
mov dword [esi + 4], edx
mov ecx, dword [eax]
mov dword [edx], ecx
mov dword [esp], eax
call fcn.00406ea0
mov eax, esi
mov esi, dword [esi]
cmp ebx, eax
jne 0x404648
mov eax, dword [ebp - 0x4c0]
mov ebx, dword [ebp - 0x4c8]
mov eax, dword [eax + 0x18]
mov esi, dword [eax]
cmp dword [ebp - 0x4c8], eax
je 0x40469a
lea esi, [esi]
nop
mov edx, dword [eax + 4]
mov dword [esi + 4], edx
mov ecx, dword [eax]
mov dword [edx], ecx
mov dword [esp], eax
call fcn.00406e50
mov eax, esi
mov esi, dword [esi]
cmp ebx, eax
jne 0x404680
mov eax, dword [ebp - 0x4cc]
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
lea esp, [edi - 8]
pop edi
ret
mov edx, str..cab
mov eax, edi
call fcn.00401e30
mov ebx, eax
test eax, eax
je 0x4045d9
lea eax, [ebp - 0x4b8]
mov dword [esp], ebx
mov dword [esp + 4], eax
mov eax, dword [sym.imp.kernel32.dll_FindFirstFileW]
mov dword [ebp - 0x4d8], eax
call eax
sub esp, 8
mov esi, eax
mov dword [ebp - 0x4dc], eax
mov dword [esp], ebx
mov ebx, dword [sym.imp.ucrtbase.dll_free]
call ebx
mov eax, esi
cmp esi, 0xffffffff
je 0x4047e8
mov esi, dword [sym.imp.kernel32.dll_FindNextFileW]
mov dword [ebp - 0x4d0], edi
mov edi, eax
mov dword [ebp - 0x4cc], ebx
lea esi, [esi]
test byte [ebp - 0x4b8], 0x10
jne 0x4047b0
mov dword [esp + 4], str.WSUSSCAN.cab
lea eax, [ebp - 0x48c]
mov dword [esp], eax
call dword [sym.imp.ucrtbase.dll__wcsicmp]
test eax, eax
je 0x4047b0
mov eax, dword [ebp - 0x4d0]
lea edx, [ebp - 0x48c]
call fcn.00401e30
mov ebx, eax
test eax, eax
je 0x4047b0
test byte [section..data], 8
jne 0x404d20
mov eax, dword [ebp - 0x4c0]
call fcn.00401040
mov dword [ebp - 0x4d4], eax
test eax, eax
je 0x404ca8
mov edx, eax
mov eax, ebx
call fcn.00401290
test eax, eax
jne 0x404a78
test byte [section..data], 2
jne 0x404c45
mov dword [esp], ebx
mov eax, dword [ebp - 0x4cc]
call eax
lea esi, [esi]
lea esi, [esi]
lea eax, [ebp - 0x4b8]
mov dword [esp], edi
mov dword [esp + 4], eax
call esi
sub esp, 8
test eax, eax
jne 0x404718
mov eax, dword [ebp - 0x4dc]
mov edi, dword [ebp - 0x4d0]
mov ebx, dword [ebp - 0x4cc]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_FindClose]
sub esp, 4
mov edx, str..xml
mov eax, edi
call fcn.00401e30
mov esi, eax
test eax, eax
je 0x4045d9
lea eax, [ebp - 0x4b8]
mov dword [esp], esi
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x4d8]
call eax
sub esp, 8
mov dword [ebp - 0x4d4], eax
mov dword [esp], esi
call ebx
mov eax, dword [ebp - 0x4d4]
cmp eax, 0xffffffff
je 0x4048be
mov esi, dword [sym.imp.kernel32.dll_FindNextFileW]
mov dword [ebp - 0x4cc], edi
mov edi, eax
mov dword [ebp - 0x4d0], ebx
lea esi, [esi]
test byte [ebp - 0x4b8], 0x10
jne 0x404896
mov eax, dword [ebp - 0x4cc]
lea edx, [ebp - 0x48c]
call fcn.00401e30
mov ebx, eax
test eax, eax
je 0x404896
mov eax, dword [ebp - 0x4c8]
mov dword [esp], ebx
mov dword [esp + 4], eax
call fcn.00407190
test eax, eax
jne 0x40488b
test byte [section..data], 2
jne 0x404ea9
mov dword [esp], ebx
mov eax, dword [ebp - 0x4d0]
call eax
lea eax, [ebp - 0x4b8]
mov dword [esp], edi
mov dword [esp + 4], eax
call esi
sub esp, 8
test eax, eax
jne 0x404848
mov eax, dword [ebp - 0x4d4]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_FindClose]
sub esp, 4
test byte [section..data], 8
jne 0x404d8d
mov eax, dword [ebp - 0x4c0]
mov edi, dword [ebp - 0x4c8]
cmp edi, dword [eax + 0x18]
je 0x404f8f
mov eax, dword [ebp - 0x4c0]
mov edx, dword [ebp - 0x4c4]
mov eax, dword [eax + 0x10]
cmp dword [ebp - 0x4c4], eax
je 0x40490d
lea esi, [esi]
nop
mov dword [eax + 8], 0
mov eax, dword [eax]
cmp edx, eax
jne 0x404900
mov eax, dword [ebp - 0x4c0]
mov edx, 1
call fcn.00404410
test eax, eax
je 0x404f0e
mov eax, dword [ebp - 0x4c0]
mov edx, dword [ebp - 0x4c4]
mov eax, dword [eax + 0x10]
cmp dword [ebp - 0x4c4], eax
je 0x40494d
lea esi, [esi]
mov dword [eax + 8], 0
mov eax, dword [eax]
cmp edx, eax
jne 0x404940
mov eax, dword [ebp - 0x4c0]
xor edx, edx
call fcn.00404410
test eax, eax
je 0x404f59
test byte [section..data], 8
jne 0x404e80
mov dword [ebp - 0x4cc], 1
jmp 0x4045e3
test esi, esi
je 0x404d83
mov eax, esi
shr eax, 0x10
test eax, eax
je 0x4049f0
mov dword [esp + 4], 0xffffffff
mov dword [esp], esi
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, 0x40a015
test edx, edx
jne 0x4049bc
mov edx, 0xffffffff
mov eax, esi
call fcn.004014a0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Processing_msu_file__s_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 3
call fcn.00401ae0
jmp 0x40459c
mov dword [esp + 4], esi
mov dword [esp], 0x40a008
call fcn.004016c0
jmp 0x4049bc
test esi, esi
je 0x40515c
mov eax, esi
shr eax, 0x10
test eax, eax
je 0x404f44
mov dword [esp + 4], 0xffffffff
mov dword [esp], esi
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, 0x40a015
test edx, edx
jne 0x404a48
mov edx, 0xffffffff
mov eax, esi
call fcn.004014a0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Failed_to_extract__s_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 1
call fcn.00401ae0
jmp 0x4045d9
mov eax, dword [ebp - 0x4d4]
mov edx, str._manifest_.cix.xml
call fcn.00401e30
test eax, eax
je 0x404ca8
mov dword [esp], eax
mov dword [ebp - 0x4e0], eax
call dword [sym.imp.kernel32.dll_GetFileAttributesW]
mov edx, dword [ebp - 0x4e0]
sub esp, 4
cmp eax, 0xffffffff
je 0x404b13
test byte [section..data], 1
je 0x404b13
mov dword [esp + 0xc], str.Cabinet_uses_proprietary_msdelta_file_compression_which_is_not__yet__supported_n
mov dword [esp + 8], str.load_assemblies_from_cab
mov dword [esp + 4], 0x408000
mov dword [esp], 0
call fcn.00401ae0
test byte [section..data], 1
mov edx, dword [ebp - 0x4e0]
je 0x404b13
mov dword [esp + 0xc], str.Installation_of_msu_file_will_most_likely_fail_n
mov dword [esp + 8], str.load_assemblies_from_cab
mov dword [esp + 4], 0x408000
mov dword [esp], 0
call fcn.00401ae0
mov edx, dword [ebp - 0x4e0]
mov dword [esp], edx
mov eax, dword [ebp - 0x4cc]
call eax
mov eax, dword [ebp - 0x4d4]
mov edx, 0x40a06e
call fcn.00401e30
test eax, eax
je 0x404ca8
lea ecx, [ebp - 0x268]
mov dword [esp], eax
mov dword [esp + 4], ecx
mov edx, dword [ebp - 0x4d8]
mov dword [ebp - 0x4e4], eax
call edx
mov edx, dword [ebp - 0x4e4]
sub esp, 8
mov dword [ebp - 0x4e0], eax
mov dword [esp], edx
mov ecx, dword [ebp - 0x4cc]
call ecx
mov eax, dword [ebp - 0x4e0]
cmp eax, 0xffffffff
je 0x40479b
mov dword [ebp - 0x4e4], edi
mov edi, eax
mov dword [ebp - 0x4e8], ebx
lea esi, [esi]
nop
test byte [ebp - 0x268], 0x10
jne 0x404c08
mov edx, str..manifest
lea eax, [ebp - 0x23c]
call fcn.00401410
test eax, eax
jne 0x404bc1
lea eax, [ebp - 0x23c]
mov edx, str..mum
call fcn.00401410
test eax, eax
je 0x404c08
mov eax, dword [ebp - 0x4d4]
lea edx, [ebp - 0x23c]
call fcn.00401e30
mov ebx, eax
test eax, eax
je 0x404c08
mov dword [esp], eax
call fcn.00406fd0
test eax, eax
je 0x404bfd
mov ecx, dword [ebp - 0x4c4]
mov edx, dword [ebp - 0x4c0]
mov dword [eax], ecx
mov ecx, dword [edx + 0x14]
mov dword [eax + 4], ecx
mov dword [ecx], eax
mov dword [edx + 0x14], eax
mov dword [esp], ebx
mov eax, dword [ebp - 0x4cc]
call eax
lea eax, [ebp - 0x268]
mov dword [esp], edi
mov dword [esp + 4], eax
call esi
sub esp, 8
test eax, eax
jne 0x404b90
mov eax, dword [ebp - 0x4e0]
mov edi, dword [ebp - 0x4e4]
mov ebx, dword [ebp - 0x4e8]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_FindClose]
sub esp, 4
jmp 0x40479b
mov eax, ebx
shr eax, 0x10
test eax, eax
je 0x40520d
mov dword [esp + 4], 0xffffffff
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, 0x40a015
test edx, edx
jne 0x404c7d
mov edx, 0xffffffff
mov eax, ebx
call fcn.004014a0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Failed_to_extract__s_n
mov dword [esp + 8], str.load_assemblies_from_cab
mov dword [esp + 4], 0x408000
mov dword [esp], 1
call fcn.00401ae0
lea esi, [esi]
test byte [section..data], 2
je 0x40479b
mov eax, ebx
shr eax, 0x10
test eax, eax
je 0x4051b3
mov dword [esp + 4], 0xffffffff
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, 0x40a015
test edx, edx
jne 0x404ced
mov edx, 0xffffffff
mov eax, ebx
call fcn.004014a0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Failed_to_load_all_manifests_from__s__ignoring_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 1
call fcn.00401ae0
jmp 0x40479b
shr eax, 0x10
test eax, eax
je 0x404e6b
mov dword [esp + 4], 0xffffffff
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, 0x40a015
test edx, edx
jne 0x404d56
mov edx, 0xffffffff
mov eax, ebx
call fcn.004014a0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Processing_cab_file__s_n
mov dword [esp + 8], str.load_assemblies_from_cab
mov dword [esp + 4], 0x408000
mov dword [esp], 3
call fcn.00401ae0
jmp 0x404764
mov eax, 0x40a00e
jmp 0x4049bc
mov dword [esp], section..data
call fcn.00407b50
test al, 8
je 0x4048cb
movzx eax, byte [section..data]
test al, 8
jne 0x4051c8
mov edi, dword [ebp - 0x4c0]
mov ebx, dword [edi + 0x18]
cmp dword [ebp - 0x4c8], ebx
je 0x404ff7
mov edi, dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov esi, dword [ebp - 0x4c8]
jmp 0x404de2
mov ebx, dword [ebx]
cmp esi, ebx
je 0x404fcf
mov edx, eax
and edx, 8
je 0x404dd8
mov ecx, dword [ebx + 8]
test ecx, ecx
je 0x4051a9
mov eax, ecx
shr eax, 0x10
test eax, eax
je 0x405178
mov dword [esp + 4], 0xffffffff
mov dword [esp], ecx
mov dword [ebp - 0x4cc], ecx
call edi
mov edx, eax
sub esp, 8
mov eax, 0x40a015
test edx, edx
jne 0x404e32
mov eax, dword [ebp - 0x4cc]
mov edx, 0xffffffff
call fcn.004014a0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.___s_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 3
call fcn.00401ae0
movzx eax, byte [section..data]
mov edx, eax
and edx, 8
jmp 0x404dd8
mov dword [esp + 4], ebx
mov dword [esp], 0x40a008
call fcn.004016c0
jmp 0x404d56
mov dword [esp + 0xc], str.Installation_finished_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 3
call fcn.00401ae0
jmp 0x40496f
mov eax, ebx
shr eax, 0x10
test eax, eax
je 0x40518d
mov dword [esp + 4], 0xffffffff
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, 0x40a015
test edx, edx
jne 0x404ee1
mov edx, 0xffffffff
mov eax, ebx
call fcn.004014a0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Failed_to_load_all_updates_from__s__ignoring_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 1
call fcn.00401ae0
jmp 0x40488b
test byte [section..data], 2
je 0x4045d9
mov dword [esp + 0xc], str.Dry_run_failed__aborting_installation_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 1
call fcn.00401ae0
jmp 0x4045d9
mov dword [esp + 4], esi
mov dword [esp], 0x40a008
call fcn.004016c0
jmp 0x404a48
test byte [section..data], 2
je 0x4045d9
mov dword [esp + 0xc], str.Installation_failed_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 1
call fcn.00401ae0
jmp 0x4045d9
test byte [section..data], 2
je 0x4045d9
mov dword [esp + 0xc], str.No_updates_found__probably_incompatible_MSU_file_format__n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 1
call fcn.00401ae0
jmp 0x4045d9
movzx edx, byte [section..data]
and edx, 8
test dl, dl
je 0x404ff7
mov dword [esp + 0xc], str.List_of_manifests__with_dependencies_:_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 3
call fcn.00401ae0
mov eax, dword [ebp - 0x4c0]
mov esi, dword [eax + 0x10]
cmp dword [ebp - 0x4c4], esi
je 0x4048cb
mov edi, esi
nop
test byte [section..data], 8
jne 0x4050f0
mov ebx, dword [edi + 0x28]
lea esi, [edi + 0x28]
cmp esi, ebx
je 0x4050ba
mov dword [ebp - 0x4cc], edi
jmp 0x40503e
mov ebx, dword [ebx]
cmp ebx, esi
je 0x4050b4
test byte [section..data], 8
je 0x405038
mov edi, dword [ebx + 8]
test edi, edi
je 0x4050e8
mov eax, edi
shr eax, 0x10
test eax, eax
je 0x4050d0
mov dword [esp + 4], 0xffffffff
mov dword [esp], edi
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, 0x40a015
test edx, edx
jne 0x405086
mov edx, 0xffffffff
mov eax, edi
call fcn.004014a0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str._______s_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 3
call fcn.00401ae0
mov ebx, dword [ebx]
cmp ebx, esi
jne 0x40503e
mov edi, dword [ebp - 0x4cc]
mov edi, dword [edi]
cmp dword [ebp - 0x4c4], edi
jne 0x405010
jmp 0x4048cb
mov dword [esp + 4], edi
mov dword [esp], 0x40a008
call fcn.004016c0
jmp 0x405086
mov eax, 0x40a00e
jmp 0x405086
mov ebx, dword [edi + 0x14]
test ebx, ebx
je 0x4051a2
mov eax, ebx
shr eax, 0x10
test eax, eax
je 0x405166
mov dword [esp + 4], 0xffffffff
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, 0x40a015
test edx, edx
jne 0x40512f
mov edx, 0xffffffff
mov eax, ebx
call fcn.004014a0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.___s_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 3
call fcn.00401ae0
jmp 0x40501d
mov eax, 0x40a00e
jmp 0x404a48
mov dword [esp + 4], ebx
mov dword [esp], 0x40a008
call fcn.004016c0
jmp 0x40512f
mov dword [esp + 4], ecx
mov dword [esp], 0x40a008
call fcn.004016c0
jmp 0x404e32
mov dword [esp + 4], ebx
mov dword [esp], 0x40a008
call fcn.004016c0
jmp 0x404ee1
mov eax, 0x40a00e
jmp 0x40512f
mov eax, 0x40a00e
jmp 0x404e32
mov dword [esp + 4], ebx
mov dword [esp], 0x40a008
call fcn.004016c0
jmp 0x404ced
mov dword [esp + 0xc], str.List_of_updates:_n
mov dword [esp + 8], str.install_msu
mov dword [esp + 4], 0x408000
mov dword [esp], 3
call fcn.00401ae0
mov eax, dword [ebp - 0x4c0]
mov ebx, dword [eax + 0x18]
cmp dword [ebp - 0x4c8], ebx
je 0x404fc5
movzx eax, byte [section..data]
jmp 0x404dc5
mov dword [esp + 4], ebx
mov dword [esp], 0x40a008
call fcn.004016c0
jmp 0x404c7d