Function at 0x401d70
Capabilities:
Check if file exists
Check mutex on windows
Create process on windows
Get file attributes
Query or enumerate registry value

Disassembly:
sub esp, 0x278
push ebx
push ebp
push esi
mov esi, dword [sym.imp.ADVAPI32.dll_RegOpenKeyExA]
lea eax, [esp + 0xc]
push edi
push eax
push 0x20019
push 0
push str.SOFTWARECanonDIASSETUP
push reloc.OLEAUT32.dll_SysReAllocString
mov byte [esp + 0x84], 0
call esi
mov edi, dword [sym.imp.ADVAPI32.dll_RegQueryValueExA]
mov ebp, dword [sym.imp.ADVAPI32.dll_RegCloseKey]
test eax, eax
mov ebx, 0x114
jne 0x401de6
lea ecx, [esp + 0x14]
lea edx, [esp + 0x70]
push ecx
mov ecx, dword [esp + 0x14]
lea eax, [esp + 0x1c]
push edx
push eax
push 0
push str.Path
push ecx
mov dword [esp + 0x2c], ebx
call edi
test eax, eax
je 0x401ddf
mov byte [esp + 0x70], 0
mov edx, dword [esp + 0x10]
push edx
call ebp
mov al, byte [esp + 0x70]
test al, al
jne 0x401ea9
lea eax, [esp + 0x10]
push eax
push 0x20019
push 0
push str.SOFTWAREMicrosoftWindowsCurrentVersion
push reloc.OLEAUT32.dll_SysReAllocString
call esi
test eax, eax
jne 0x401e9d
lea ecx, [esp + 0x14]
lea edx, [esp + 0x70]
push ecx
mov ecx, dword [esp + 0x14]
lea eax, [esp + 0x1c]
push edx
push eax
push 0
push str.ProgramFilesDir
push ecx
mov dword [esp + 0x2c], ebx
call edi
test eax, eax
je 0x401e3c
mov byte [esp + 0x70], 0
mov edx, dword [esp + 0x10]
push edx
call ebp
mov edi, 0x40d15c
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x70]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
lea edx, [esp + 0x70]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, str.Canon
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov al, byte [esp + 0x70]
test al, al
je 0x402048
mov edi, 0x40d15c
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x70]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
lea edx, [esp + 0x70]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, str.CnxDias.exe
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
lea eax, [esp + 0x70]
and ecx, 3
push eax
rep movsb byte es:[edi], byte [esi]
call dword [sym.imp.KERNEL32.dll_GetFileAttributesA]
cmp eax, 0xffffffff
je 0x402025
mov ecx, 0x11
xor eax, eax
lea edi, [esp + 0x2c]
lea edx, [esp + 0x1c]
rep stosd dword es:[edi], eax
xor ecx, ecx
mov eax, 1
mov dword [esp + 0x1c], ecx
mov dword [esp + 0x58], eax
mov dword [esp + 0x20], ecx
mov word [esp + 0x5c], ax
lea eax, [esp + 0x2c]
mov dword [esp + 0x24], ecx
push edx
push eax
push ecx
push ecx
push ecx
push ecx
push ecx
mov dword [esp + 0x44], ecx
push ecx
lea ecx, [esp + 0x90]
push str.__remove
push ecx
mov dword [esp + 0x54], 0x44
call dword [sym.imp.KERNEL32.dll_CreateProcessA]
mov esi, dword [esp + 0x1c]
push 0xffffffffffffffff
push esi
mov edi, eax
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
cmp eax, 0xffffffff
jne 0x401fb7
lea edx, [esp + 0x18]
push edx
push esi
call dword [sym.imp.KERNEL32.dll_GetExitCodeProcess]
push esi
call dword [sym.imp.KERNEL32.dll_CloseHandle]
push 0x30
push 0
push str.DIAS_NOT_INSTALLED
call fcn.00402fd0
add esp, 0xc
mov eax, 2
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x278
ret
mov ebp, dword [sym.imp.KERNEL32.dll_CloseHandle]
push esi
call ebp
test edi, edi
je 0x402048
lea eax, [esp + 0x184]
push str.DiasDispatcherExist
push eax
xor esi, esi
call fcn.004038c0
mov ebx, dword [sym.imp.KERNEL32.dll_OpenMutexA]
mov edi, dword [sym.imp.KERNEL32.dll_Sleep]
add esp, 8
lea ecx, [esp + 0x184]
push ecx
push 0
push 0x1f0001
call ebx
test eax, eax
je 0x402012
cmp esi, 0x1e
ja 0x402012
push eax
call ebp
push 0x3e8
call edi
inc esi
jmp 0x401feb
push eax
call ebp
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x278
ret
cmp dword [0x41e1b0], 0xa
jne 0x402043
call fcn.00403340
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x278
ret
call fcn.00403260
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x278
ret