Function at 0x402e84
Capabilities:
Link many functions at runtime

Disassembly:
push rdi
sub rsp, 0x30
mov qword [rsp + 0x20], 0xfffffffffffffffe
mov qword [rsp + 0x50], rbx
mov rdi, rcx
xor ebx, ebx
cmp qword [rcx + 8], rbx
jne 0x4031e9
mov dword [rcx], 1
call fcn.0040272c
mov qword [rdi + 8], rax
cmp rax, rbx
je 0x4031e7
xor r8d, r8d
xor edx, edx
lea ecx, [rbx + 2]
call fcn.0040283c
cmp eax, ebx
jne 0x4031e7
lea rdx, str.MsiSetInternalUI
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x28], rax
lea rdx, str.MsiCloseHandle
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x68], rax
lea rdx, str.MsiGetActiveDatabase
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x88], rax
lea rdx, str.MsiViewExecute
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x98], rax
lea rdx, str.MsiViewFetch
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0xa8], rax
lea rdx, str.MsiRecordGetInteger
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0xb8], rax
lea rdx, str.MsiCreateRecord
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0xc0], rax
lea rdx, str.MsiEnableLogW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x20], rax
lea rdx, str.MsiGetProductInfoW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x38], rax
lea rdx, str.MsiGetPropertyW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x40], rax
lea rdx, str.MsiSetPropertyW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x48], rax
lea rdx, str.MsiOpenPackageW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x50], rax
lea rdx, str.MsiSequenceW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x58], rax
lea rdx, str.MsiDoActionW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x60], rax
lea rdx, str.MsiSetFeatureStateW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x70], rax
lea rdx, str.MsiSetExternalUIW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x30], rax
lea rdx, str.MsiGetTargetPathW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x78], rax
lea rdx, str.MsiSetTargetPathW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x80], rax
lea rdx, str.MsiDatabaseOpenViewW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0x90], rax
lea rdx, str.MsiRecordSetStringW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0xa0], rax
lea rdx, str.MsiRecordGetStringW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0xb0], rax
lea rdx, str.MsiQueryProductStateW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0xc8], rax
lea rdx, str.MsiOpenDatabaseW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0xd0], rax
lea rdx, str.MsiInstallProductW
mov rcx, qword [rdi + 8]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rdi + 0xd8], rax
cmp qword [rdi + 0x28], rbx
je 0x4031a2
cmp qword [rdi + 0x68], rbx
je 0x4031a2
cmp qword [rdi + 0x30], rbx
je 0x4031a2
cmp qword [rdi + 0x20], rbx
je 0x4031a2
cmp qword [rdi + 0x38], rbx
je 0x4031a2
cmp qword [rdi + 0x40], rbx
je 0x4031a2
cmp qword [rdi + 0x48], rbx
je 0x4031a2
cmp qword [rdi + 0x50], rbx
je 0x4031a2
cmp qword [rdi + 0x58], rbx
je 0x4031a2
cmp qword [rdi + 0x60], rbx
je 0x4031a2
cmp qword [rdi + 0x70], rbx
je 0x4031a2
cmp qword [rdi + 0x78], rbx
je 0x4031a2
cmp qword [rdi + 0x80], rbx
je 0x4031a2
cmp qword [rdi + 0x90], rbx
je 0x4031a2
cmp qword [rdi + 0xa0], rbx
je 0x4031a2
cmp qword [rdi + 0x88], rbx
je 0x4031a2
cmp qword [rdi + 0x98], rbx
je 0x4031a2
cmp qword [rdi + 0xa8], rbx
je 0x4031a2
cmp qword [rdi + 0xb0], rbx
je 0x4031a2
cmp qword [rdi + 0xc8], rbx
je 0x4031a2
cmp qword [rdi + 0xd0], rbx
je 0x4031a2
cmp rax, rbx
jne 0x4031e9
mov ecx, 0x840
call fcn.004443a8
mov qword [rsp + 0x48], rax
cmp rax, rbx
je 0x4031d0
lea r9, str.Failed_to_GetProcAddress___on_one_or_more_functions_in_msi.dll.
mov edx, 0x1003
mov r8d, edx
mov rcx, rax
call fcn.00401de0
mov rbx, rax
mov qword [rsp + 0x40], rbx
lea rdx, [0x004bc148]
lea rcx, [rsp + 0x40]
call fcn.00449f60
int3
mov dword [rdi], ebx
mov rbx, qword [rsp + 0x50]
add rsp, 0x30
pop rdi
ret