Function at 0x41e6d9
Capabilities:
Check if file exists
Check mutex on windows
Copy file
Delete directory
Delete file
Get common file path
Get file attributes
Set file attributes

Disassembly:
push 0x544
mov eax, 0x48f3d2
call fcn.00458f67
mov edi, ecx
mov eax, dword [ebp + 0x10]
mov esi, dword [ebp + 8]
mov dword [ebp - 0x540], eax
mov eax, dword [ebp + 0x18]
mov dword [ebp - 0x544], esi
mov dword [ebp - 0x54c], eax
test esi, esi
je 0x41f0da
cmp byte [esi], 0
je 0x41f0da
test eax, eax
je 0x41f0da
mov eax, dword [ebp + 0xc]
push esi
mov dword [edi + 0x178], eax
call fcn.00465f76
mov esi, eax
pop ecx
test esi, esi
jne 0x41e75c
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41f0da
cmp dword [0x4c12e0], 0
je 0x41f0da
mov eax, dword [ecx]
push str.FATAL._Could_not_allocate_memory
push ecx
call dword [eax + 0x1c]
jmp 0x41f0d8
push 0x5c
push esi
call fcn.004662f3
pop ecx
pop ecx
test eax, eax
je 0x41e778
push eax
mov byte [eax], 0
call fcn.004662b8
pop ecx
mov ebx, eax
jmp 0x41e77a
mov ebx, esi
cmp dword [0x4c12e0], 0
je 0x41e79d
lea eax, [edi + 0xc]
push eax
push dword [0x4c3630]
push 0
push ebx
push str.Installer
call fcn.0040f1ff
add esp, 0x14
push ebx
lea ecx, [edi + 0x30]
call fcn.0040a9af
push esi
call fcn.0045f1d9
mov eax, dword [ebp + 0x1c]
mov dword [edi + 0x194], eax
mov eax, dword [ebp + 0x20]
mov dword [edi + 0x198], eax
mov eax, dword [ebp + 0x24]
mov dword [edi + 0x19c], eax
mov al, byte [ebp + 0x28]
mov byte [edi + 0x17c], al
mov eax, dword [ebp + 0x2c]
pop ecx
test eax, eax
je 0x41e7de
mov dword [edi + 0x18c], eax
mov eax, dword [ebp + 0x30]
test eax, eax
je 0x41e7eb
mov dword [edi + 0x190], eax
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41e81b
cmp dword [0x4c12e0], 0
je 0x41e81b
cmp dword [0x4c3630], 0
mov ebx, dword [ebp - 0x544]
je 0x41e821
mov eax, dword [ecx]
push ebx
push str.Initializing_INF_file_class_with_inf_path__s
push ecx
call dword [eax + 0x10]
add esp, 0xc
jmp 0x41e821
mov ebx, dword [ebp - 0x544]
push 0x44
call fcn.00458e9f
mov dword [ebp - 0x550], eax
pop ecx
test eax, eax
je 0x41e83c
mov ecx, eax
call fcn.00413a26
jmp 0x41e83e
xor eax, eax
mov dword [edi + 0x10], eax
test eax, eax
je 0x41f0b4
mov ecx, eax
call fcn.0041525c
test eax, eax
je 0x41f0b4
mov eax, dword [ebp - 0x540]
test eax, eax
je 0x41e8d2
cmp byte [eax], 0
je 0x41e8d2
push eax
call fcn.00465f76
pop ecx
mov ecx, dword [edi + 0xc]
mov dword [edi + 0x60], eax
test ecx, ecx
je 0x41e8f1
mov edx, dword [ecx]
push eax
call dword [edx + 0x28]
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41e8f1
cmp dword [edi + 0x60], 0
je 0x41e8b1
cmp dword [0x4c12e0], 0
je 0x41e8f1
cmp dword [0x4c3630], 0
je 0x41e8f1
mov eax, dword [ecx]
push ebx
push dword [edi + 0x60]
push str...The_AppID__s_will_be_used_to_control_inf__s
push ecx
call dword [eax + 0x10]
add esp, 0x10
jmp 0x41e8f1
cmp dword [0x4c12e0], 0
je 0x41e8f1
cmp dword [0x4c3630], 0
je 0x41e8f1
mov eax, dword [ecx]
push str...FATAL._Not_enough_memory
push ecx
call dword [eax + 0x10]
pop ecx
pop ecx
jmp 0x41e8f1
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41e8f1
cmp dword [0x4c12e0], 0
je 0x41e8f1
mov eax, dword [ecx]
push ebx
push str...The_execution_of__s_does_not_have_a_controlling_appid._We_will_try_to_read_one_directly_from_the_inf_itself_later_on.
push ecx
call dword [eax + 0x18]
add esp, 0xc
and dword [ebp - 0x548], 0
and dword [ebp - 0x540], 0
test byte [ebp + 0xc], 1
je 0x41eeca
cmp dword [ebp + 0x14], 0
je 0x41eeca
push ebx
call fcn.00465f76
mov dword [ebp - 0x540], eax
pop ecx
test eax, eax
je 0x41e734
push 0x5c
push eax
call fcn.004662f3
pop ecx
pop ecx
test eax, eax
je 0x41e942
push eax
mov byte [eax], 0
call fcn.004662b8
pop ecx
jmp 0x41e948
mov eax, dword [ebp - 0x540]
push eax
mov esi, 0x104
lea eax, [ebp - 0x524]
push esi
push eax
call fcn.00465df5
add esp, 0xc
cmp dword [edi + 0x12c], 0
jne 0x41e96b
xor eax, eax
jmp 0x41e979
lea eax, [edi + 0x11c]
cmp dword [eax + 0x14], 0x10
jb 0x41e979
mov eax, dword [eax]
push eax
lea eax, [ebp - 0x420]
push esi
push eax
call fcn.00443242
mov ecx, dword [edi + 0xc]
add esp, 0xc
test eax, eax
je 0x41eea0
test ecx, ecx
je 0x41e9c0
cmp dword [0x4c12e0], 0
je 0x41e9c0
cmp dword [0x4c3630], 0
je 0x41e9c0
mov eax, dword [ecx]
lea edx, [ebp - 0x420]
push edx
push str.Successfully_got_path__s
push ecx
call dword [eax + 0x10]
add esp, 0xc
lea eax, [ebp - 0x420]
push eax
call fcn.004101af
mov edx, eax
pop ecx
mov ecx, dword [edi + 0xc]
test edx, edx
jne 0x41e9f9
test ecx, ecx
je 0x41ea30
cmp dword [0x4c12e0], eax
je 0x41ea30
cmp dword [0x4c3630], eax
je 0x41ea30
mov eax, dword [ecx]
push str.Created_McAfeeTemp
push ecx
call dword [eax + 0x10]
pop ecx
pop ecx
jmp 0x41ea30
cmp edx, 0xb7
jne 0x41ee7b
test ecx, ecx
je 0x41ea30
cmp dword [0x4c12e0], 0
je 0x41ea30
cmp dword [0x4c3630], 0
je 0x41ea30
mov eax, dword [ecx]
lea edx, [ebp - 0x420]
push edx
push str...Directory__s_already_exists__continuing
push ecx
call dword [eax + 0x10]
add esp, 0xc
push 0x208
lea eax, [ebp - 0x218]
push 0
push eax
call fcn.0045b1d0
add esp, 0xc
lea eax, [ebp - 0x218]
push eax
push 0
push str.qxzsd
lea eax, [ebp - 0x420]
push eax
call dword [sym.imp.KERNEL32.dll_GetTempFileNameA]
test eax, eax
je 0x41ee56
cmp byte [ebp - 0x218], 0
je 0x41ee56
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41eaa4
cmp dword [0x4c12e0], 0
je 0x41eaa4
cmp dword [0x4c3630], 0
je 0x41eaa4
mov eax, dword [ecx]
lea edx, [ebp - 0x218]
push edx
push str...Successfully_got_a_temp_file_name:__s
push ecx
call dword [eax + 0x10]
add esp, 0xc
lea eax, [ebp - 0x218]
push eax
call dword [sym.imp.KERNEL32.dll_DeleteFileA]
mov ebx, dword [edi + 0xc]
test ebx, ebx
je 0x41eb0c
test eax, eax
je 0x41eae5
cmp dword [0x4c12e0], 0
je 0x41eb0c
cmp dword [0x4c3630], 0
je 0x41eb0c
mov eax, dword [ebx]
lea ecx, [ebp - 0x218]
push ecx
push str...Successfully_deleted_file:__s
push ebx
call dword [eax + 0x10]
add esp, 0xc
jmp 0x41eb0c
cmp dword [0x4c12e0], 0
je 0x41eb0c
mov eax, dword [ebx]
mov esi, dword [eax + 0x18]
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea eax, [ebp - 0x218]
push eax
push str...Error_deleting_file:__s__Error:__d
push ebx
call esi
add esp, 0x10
lea eax, [ebp - 0x218]
push 0x2e
push eax
call fcn.004662f3
pop ecx
pop ecx
test eax, eax
je 0x41eb23
mov byte [eax], 0
push str.GlobalBBD27E4A_E912_4f0f_911A_09098C58970D
push 1
push 0
call dword [sym.imp.KERNEL32.dll_CreateMutexA]
mov ebx, eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
test ebx, ebx
jne 0x41eb64
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41ebbb
cmp dword [0x4c12e0], ebx
je 0x41ebbb
mov eax, dword [ecx]
push edx
lea edx, [ebp - 0x218]
push edx
push str...Unable_to_obtain_mutex_for_creation_of_folder:__s._Error:__d
push ecx
call dword [eax + 0x14]
jmp 0x41ebb8
cmp edx, 0xb7
jne 0x41ebbb
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41eb89
cmp dword [0x4c12e0], 0
je 0x41eb89
mov eax, dword [ecx]
push str...Another_McInst_process_is_creating_its_temp_folder.__Waiting...
push ecx
call dword [eax + 0x14]
pop ecx
pop ecx
push 0x2710
push ebx
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
mov edx, dword [edi + 0xc]
test edx, edx
je 0x41ebbb
cmp dword [0x4c12e0], 0
je 0x41ebbb
mov ecx, dword [edx]
lea esi, [ebp - 0x218]
push esi
push eax
push str...Finished_waiting__return:__d_.__Attempt_to_create_directory:__s...
push edx
call dword [ecx + 0x14]
add esp, 0x10
lea eax, [ebp - 0x218]
push eax
call fcn.004101af
mov esi, eax
pop ecx
test ebx, ebx
je 0x41ec02
push ebx
call dword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41ebfb
cmp dword [0x4c12e0], 0
je 0x41ebfb
cmp dword [0x4c3630], 0
je 0x41ebfb
mov eax, dword [ecx]
push str...Mutex_released.
push ecx
call dword [eax + 0x10]
pop ecx
pop ecx
push ebx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov ecx, dword [edi + 0xc]
test esi, esi
je 0x41ec64
cmp esi, 0xb7
jne 0x41ec3d
test ecx, ecx
je 0x41ea30
cmp dword [0x4c12e0], 0
je 0x41ea30
mov eax, dword [ecx]
lea edx, [ebp - 0x218]
push edx
push str...Directory__s_already_exists.__Trying_a_different_temp_folder
push ecx
call dword [eax + 0x14]
jmp 0x41ea2d
test ecx, ecx
je 0x41eeba
cmp dword [0x4c12e0], 0
je 0x41eeba
push esi
lea edx, [ebp - 0x218]
push edx
push str.Cannot_create_the_temp_directory__s_for_this_McInst_process._Error:__d._Unable_to_install
jmp 0x41ee95
test ecx, ecx
je 0x41ec8f
cmp dword [0x4c12e0], 0
je 0x41ec8f
cmp dword [0x4c3630], 0
je 0x41ec8f
mov eax, dword [ecx]
lea edx, [ebp - 0x218]
push edx
push str...Successfully_created_directory__s
push ecx
call dword [eax + 0x10]
add esp, 0xc
lea eax, [ebp - 0x218]
push eax
call fcn.00465f76
mov dword [edi + 0x150], eax
mov esi, 0x208
mov dword [esp], 0x494bbc
lea eax, [ebp - 0x218]
push esi
push eax
call fcn.00465e4f
lea eax, [ebp - 0x524]
push eax
lea eax, [ebp - 0x218]
push esi
push eax
call fcn.00465e4f
mov esi, dword [ebp - 0x544]
lea eax, [ebp - 0x218]
add esp, 0x18
push 0
push eax
push esi
call dword [sym.imp.KERNEL32.dll_CopyFileA]
test eax, eax
je 0x41edb4
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41ed1e
cmp dword [0x4c12e0], 0
je 0x41ed1e
cmp dword [0x4c3630], 0
je 0x41ed1e
mov eax, dword [ecx]
lea edx, [ebp - 0x218]
push edx
push esi
push str...Successfully_copied_file__s_to__s
push ecx
call dword [eax + 0x10]
add esp, 0x10
lea eax, [ebp - 0x218]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesA]
cmp eax, 0xffffffff
je 0x41ed82
test al, 1
je 0x41ef41
and eax, 0xfffffffe
push eax
lea eax, [ebp - 0x218]
push eax
call dword [sym.imp.KERNEL32.dll_SetFileAttributesA]
test eax, eax
jne 0x41ef41
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41eeba
cmp dword [0x4c12e0], eax
je 0x41eeba
mov eax, dword [ecx]
lea edx, [ebp - 0x218]
push edx
push str.Error_removing_read_only_attribute_from__s
push ecx
call dword [eax + 0x14]
add esp, 0xc
jmp 0x41eeba
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41ef41
cmp dword [0x4c12e0], 0
je 0x41ef41
mov eax, dword [ecx]
lea edx, [ebp - 0x218]
push edx
push str...Unable_to_get_file_attributes_for__s
push ecx
call dword [eax + 0x18]
add esp, 0xc
jmp 0x41ef41
mov ebx, dword [sym.imp.KERNEL32.dll_GetLastError]
call ebx
mov edx, dword [edi + 0xc]
test edx, edx
je 0x41ede3
cmp dword [0x4c12e0], 0
je 0x41ede3
mov ecx, dword [edx]
push eax
lea eax, [ebp - 0x218]
push eax
push esi
push str.Failed_to_copy_file__s_to__s._Error:__d
push edx
call dword [ecx + 0x14]
add esp, 0x14
push dword [edi + 0x150]
call dword [sym.imp.KERNEL32.dll_RemoveDirectoryA]
test eax, eax
jne 0x41ee2c
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41eeba
cmp dword [0x4c12e0], eax
je 0x41eeba
cmp dword [0x4c3630], eax
je 0x41eeba
push dword [edi + 0x150]
mov eax, dword [ecx]
push str...Removing_temp_folder___s__since_INF_cannot_be_used
push ecx
call dword [eax + 0x10]
jmp 0x41ed7a
call ebx
mov edx, dword [edi + 0xc]
test edx, edx
je 0x41eeba
cmp dword [0x4c12e0], 0
je 0x41eeba
push eax
push dword [edi + 0x150]
push str.Unable_to_clean_up_temp_folder___s____Error:__d
mov ecx, dword [edx]
push edx
call dword [ecx + 0x14]
jmp 0x41ee9b
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, dword [edi + 0xc]
test edx, edx
je 0x41eeba
cmp dword [0x4c12e0], 0
je 0x41eeba
push eax
lea eax, [ebp - 0x420]
push eax
push str.Initialization_failed:_failed_to_get_a_temporary_file_name_under__s._Error_code:__u
jmp 0x41ee4e
test ecx, ecx
je 0x41eeba
cmp dword [0x4c12e0], 0
je 0x41eeba
push edx
lea edx, [ebp - 0x420]
push edx
push str.Initialization_failed:_cannot_create_the_directory__s._Error:__d
mov eax, dword [ecx]
push ecx
call dword [eax + 0x14]
add esp, 0x10
jmp 0x41eeba
test ecx, ecx
je 0x41eeba
cmp dword [0x4c12e0], 0
je 0x41eeba
mov eax, dword [ecx]
push str.Initialization_failed:_there_was_error_getting_path_to_Program_FilesMcAfeeTemp
push ecx
call dword [eax + 0x14]
pop ecx
pop ecx
push dword [ebp - 0x540]
call fcn.0045f1d9
jmp 0x41f0d9
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41eef0
cmp dword [0x4c12e0], 0
je 0x41eef0
cmp dword [0x4c3630], 0
je 0x41eef0
mov eax, dword [ecx]
push str...We_are_either_uninstalling_or_executing_a_sub_inf._So_opening_inf_directly__without_creating_any_temporary_directory
push ecx
call dword [eax + 0x10]
pop ecx
pop ecx
mov esi, dword [sym.imp.USER32.dll_wsprintfA]
lea eax, [ebp - 0x218]
push ebx
push 0x496090
push eax
call esi
lea eax, [ebp - 0x218]
push 0x5c
push eax
call fcn.004662f3
add esp, 0x14
test eax, eax
je 0x41ef1d
mov byte [eax], 0
lea eax, [ebp - 0x218]
push eax
call fcn.00465f76
push ebx
mov dword [edi + 0x150], eax
lea eax, [ebp - 0x218]
push 0x496090
push eax
call esi
add esp, 0x10
mov eax, dword [edi + 0x10]
cmp dword [eax + 0x10], 0
je 0x41ef67
mov eax, dword [eax + 0x18]
test eax, eax
je 0x41ef67
lea ecx, [ebp - 0x548]
push ecx
push 2
push 0
lea ecx, [ebp - 0x218]
push ecx
call eax
jmp 0x41ef6a
or eax, 0xffffffff
mov dword [edi + 0x2c], eax
cmp eax, 0xffffffff
jne 0x41efdf
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov ecx, dword [edi + 0xc]
mov edx, eax
test ecx, ecx
je 0x41efcb
cmp edx, 2
jne 0x41efa6
cmp dword [0x4c12e0], 0
je 0x41efcb
mov eax, dword [ecx]
lea edx, [ebp - 0x218]
push edx
push str.INF_file__s_does_not_exist
push ecx
call dword [eax + 0x1c]
add esp, 0xc
jmp 0x41efcb
cmp dword [0x4c12e0], 0
je 0x41efcb
mov eax, dword [ecx]
push edx
push dword [ebp - 0x548]
lea edx, [ebp - 0x218]
push edx
push str.There_was_an_error_in_opening__s._Error_occured_at_line_no.__u._Error:__d
push ecx
call dword [eax + 0x1c]
add esp, 0x14
mov eax, dword [ebp - 0x540]
test eax, eax
je 0x41f0da
push eax
jmp 0x41eec0
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41f00d
cmp dword [0x4c12e0], 0
je 0x41f00d
cmp dword [0x4c3630], 0
je 0x41f00d
mov eax, dword [ecx]
lea edx, [ebp - 0x218]
push edx
push str...Successfully_opened_file__s
push ecx
call dword [eax + 0x10]
add esp, 0xc
lea eax, [ebp - 0x53c]
mov ecx, edi
push eax
call fcn.00414acb
and dword [ebp - 4], 0
mov edx, dword [edi + 0xc]
test edx, edx
je 0x41f05d
cmp dword [0x4c12e0], 0
je 0x41f05d
cmp dword [0x4c3630], 0
je 0x41f05d
mov eax, dword [edx]
cmp dword [ebp - 0x528], 0x10
mov ecx, dword [eax + 0x10]
lea eax, [ebp - 0x53c]
cmovae eax, dword [ebp - 0x53c]
push eax
push str.__Current_INF_file:__s__
push edx
call ecx
add esp, 0xc
mov eax, dword [ebp - 0x540]
test eax, eax
je 0x41f06e
push eax
call fcn.0045f1d9
pop ecx
mov eax, dword [ebp - 0x54c]
mov dword [edi + 0x160], eax
lock inc dword [eax + 4]
mov edx, dword [edi + 0xc]
test edx, edx
je 0x41f0a4
cmp dword [0x4c12e0], 0
je 0x41f0a4
cmp dword [0x4c3630], 0
je 0x41f0a4
mov ecx, dword [edx]
push str.CInfFile::_Init___returns_TRUE
push edx
call dword [ecx + 0x10]
pop ecx
pop ecx
lea ecx, [ebp - 0x53c]
call fcn.0040a94c
xor eax, eax
inc eax
jmp 0x41f0dc
mov ecx, dword [edi + 0xc]
test ecx, ecx
je 0x41f0da
cmp dword [0x4c12e0], 0
je 0x41f0da
cmp dword [0x4c3630], 0
je 0x41f0da
mov eax, dword [ecx]
push str.Could_not_create_setup_API_class_or_Init_failed
push ecx
call dword [eax + 0x10]
pop ecx
pop ecx
xor eax, eax
call fcn.00458f11
ret 0x2c