Function at 0x401540
Capabilities:
Delete registry value
Read .ini file
Set registry value

Disassembly:
sub esp, 0x864
push ebx
push ebp
push esi
xor ebx, ebx
push edi
mov dword [esp + 0x24], 1
mov dword [esp + 0x14], ebx
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x18], ebx
call fcn.00401db0
cmp eax, 9
ja case.default.0x40156a
jmp dword [eax*4 + 0x401c38]
mov eax, dword [str.WIN2000]
mov ecx, dword [0x407374]
mov dword [esp + 0x34], eax
mov dword [esp + 0x38], ecx
call fcn.00401f20
test eax, eax
jne 0x40162f
push str.Not_an_Administrator._Install_Failure._n
call fcn.00402220
add esp, 4
mov eax, 1
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x864
ret
mov edx, dword [str.WINXP]
mov ax, word [0x407344]
mov dword [esp + 0x34], edx
mov word [esp + 0x38], ax
jmp case.default.0x40156a
mov ecx, dword [str.WIN2003]
mov edx, dword [0x40733c]
mov dword [esp + 0x34], ecx
mov dword [esp + 0x38], edx
jmp case.default.0x40156a
mov eax, dword [str.WINVISTA]
mov ecx, dword [0x407330]
mov dl, byte [0x407334]
mov dword [esp + 0x34], eax
mov dword [esp + 0x38], ecx
mov byte [esp + 0x3c], dl
jmp case.default.0x40156a
mov eax, dword [str.WIN7]
mov cl, byte [0x407328]
mov dword [esp + 0x34], eax
mov byte [esp + 0x38], cl
jmp case.default.0x40156a
push str.OS_not_support.
call fcn.00402220
add esp, 4
mov eax, 2
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x864
ret
mov eax, dword [esp + 0x878]
cmp eax, 1
jle 0x40171d
mov edx, dword [esp + 0x87c]
dec eax
mov dword [esp + 0x20], eax
lea ebp, [edx + 4]
mov edi, dword [ebp]
mov esi, 0x407310
mov eax, edi
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x40167c
test cl, cl
je 0x401678
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x40167c
add eax, 2
add esi, 2
test cl, cl
jne 0x401658
xor eax, eax
jmp 0x401681
sbb eax, eax
sbb eax, 0xffffffff
cmp eax, ebx
jne 0x40168f
mov dword [esp + 0x1c], 1
jmp 0x40170b
mov esi, 0x40730c
mov eax, edi
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x4016ba
test cl, cl
je 0x4016b6
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x4016ba
add eax, 2
add esi, 2
test cl, cl
jne 0x401696
xor eax, eax
jmp 0x4016bf
sbb eax, eax
sbb eax, 0xffffffff
cmp eax, ebx
jne 0x4016cd
mov dword [esp + 0x18], 1
jmp 0x40170b
mov esi, 0x40730c
mov eax, edi
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x4016f8
test cl, cl
je 0x4016f4
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x4016f8
add eax, 2
add esi, 2
test cl, cl
jne 0x4016d4
xor eax, eax
jmp 0x4016fd
sbb eax, eax
sbb eax, 0xffffffff
cmp eax, ebx
jne 0x40170b
mov dword [0x407c6c], 1
mov eax, dword [esp + 0x20]
add ebp, 4
dec eax
mov dword [esp + 0x20], eax
jne 0x40164e
lea eax, [esp + 0x234]
push 0x100
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
lea ecx, [esp + 0x234]
push ecx
call dword [sym.imp.KERNEL32.dll_lstrlenA]
cmp eax, ebx
jle 0x40175d
mov cl, 0x5c
cmp byte [esp + eax + 0x234], cl
je 0x401755
dec eax
cmp eax, ebx
jg 0x401745
jmp 0x40175d
mov byte [esp + eax + 0x234], 0
or ecx, 0xffffffff
mov edi, 0x407308
xor eax, eax
lea edx, [esp + 0x234]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov ebx, ecx
mov esi, edi
or ecx, 0xffffffff
mov edi, edx
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 + 0x434]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x234]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
lea edx, [esp + 0x434]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
xor eax, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, str.install.ini
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
mov ebx, dword [sym.imp.KERNEL32.dll_FindFirstFileA]
and ecx, 3
lea eax, [esp + 0x734]
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x434]
push eax
push ecx
call ebx
cmp eax, 0xffffffff
jne 0x40181f
push str.Initial_File_not_Found._n
call fcn.00402220
add esp, 4
xor eax, eax
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x864
ret
mov ebp, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
lea edx, [esp + 0x434]
push edx
lea eax, [esp + 0x538]
push 0xff
push eax
push 0
lea ecx, [esp + 0x44]
push str.HardwareID
push ecx
call ebp
lea edi, [esp + 0x234]
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x134]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
xor eax, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x434]
lea edi, [esp + 0x134]
push ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
dec ecx
push 0xff
lea edx, [esp + ecx + 0x13c]
push edx
push eax
lea eax, [esp + 0x44]
push str.DriverInifile
push eax
call ebp
lea ecx, [esp + 0x134]
lea edx, [esp + 0x534]
push ecx
push edx
push str.Hardware_ID_is____s_nInitial_file_is____s_n
call fcn.00402220
lea edi, [esp + 0x240]
or ecx, 0xffffffff
xor eax, eax
add esp, 0xc
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [esp + 0x634]
mov eax, ecx
mov esi, edi
mov edi, edx
lea edx, [esp + 0x634]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
xor eax, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, str.NaIO.dll
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebp, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebp
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebp
and ecx, 3
lea eax, [esp + 0x634]
rep movsb byte es:[edi], byte [esi]
push eax
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov edi, dword [sym.imp.ADVAPI32.dll_RegOpenKeyExA]
mov ebp, dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
test eax, eax
je 0x401a16
push str.ASIO_Open
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
test eax, eax
mov dword [0x407e24], eax
je 0x401a16
mov ecx, dword [str.help]
mov dl, byte [0x40727c]
mov dword [esp + 0x28], ecx
lea ecx, [esp + 0x28]
push ecx
mov byte [esp + 0x30], dl
call eax
mov esi, str.ASUSTeK
lea eax, [esp + 0x28]
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x4019a2
test cl, cl
je 0x40199e
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x4019a2
add eax, 2
add esi, 2
test cl, cl
jne 0x40197e
xor eax, eax
jmp 0x4019a7
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
jne 0x4019df
lea eax, [esp + 0x10]
push eax
push 0xf003f
push 0
push str.SOFTWAREASUSACPIDRV
push 0x80000002
call edi
test eax, eax
jne 0x401a0b
mov edx, dword [esp + 0x10]
lea ecx, [esp + 0x24]
push 4
push ecx
push 4
push eax
push 0x407254
push edx
call ebp
jmp 0x401a0b
lea ecx, [esp + 0x10]
push ecx
push 0xf003f
push 0
push str.SOFTWAREASUSACPIDRV
push 0x80000002
call edi
test eax, eax
jne 0x401a0b
mov edx, dword [esp + 0x10]
push 0x407254
push edx
call dword [sym.imp.ADVAPI32.dll_RegDeleteValueA]
mov eax, dword [esp + 0x10]
push eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
mov eax, dword [esp + 0x18]
test eax, eax
jne 0x401a48
lea ecx, [esp + 0x134]
push ecx
call fcn.00401c60
add esp, 4
sub eax, 2
je 0x401a38
sub eax, 2
jne 0x401a48
pop edi
pop esi
pop ebp
mov eax, 0x101
pop ebx
add esp, 0x864
ret
lea edx, [esp + 0x734]
lea eax, [esp + 0x134]
push edx
push eax
call ebx
cmp eax, 0xffffffff
jne 0x401a79
push str.File_not_found._n
call fcn.00402220
add esp, 4
xor eax, eax
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x864
ret
lea ecx, [esp + 0x534]
push ecx
call fcn.00401360
add esp, 4
test eax, eax
je 0x401ad3
call fcn.00402050
lea edx, [esp + 0x14]
lea eax, [esp + 0x134]
push edx
push 1
lea ecx, [esp + 0x53c]
push eax
push ecx
push 0
call sub.newdev.dll_UpdateDriverForPlugAndPlayDevicesA
test eax, eax
jne 0x401b28
call fcn.00402110
push str.UpdateDriverForPlugAndPlayDevices
call fcn.004012e0
add esp, 4
xor eax, eax
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x864
ret
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0x103
je 0x401af0
pop edi
pop esi
pop ebp
mov eax, 2
pop ebx
add esp, 0x864
ret
call fcn.00402050
lea edx, [esp + 0x14]
lea eax, [esp + 0x134]
push edx
lea ecx, [esp + 0x538]
push eax
push ecx
call fcn.00401520
add esp, 0xc
test eax, eax
jne 0x401b28
call fcn.00402110
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x864
ret
call fcn.00402110
lea edx, [esp + 0x10]
push edx
push 0xf003f
push 0
push str.SOFTWAREASUSACPIDRV
push 0x80000002
call edi
test eax, eax
jne 0x401bdb
lea eax, [esp + 0x334]
push 0xff
push eax
push str.HH:mm:ss
push 0
push 0
push 0x800
call dword [sym.imp.KERNEL32.dll_GetTimeFormatA]
lea edi, [esp + 0x334]
or ecx, 0xffffffff
xor eax, eax
mov edx, 0xff
repne scasb al, byte es:[edi]
not ecx
dec ecx
lea edi, [esp + 0x334]
sub edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
dec ecx
push edx
lea eax, [esp + ecx + 0x338]
push eax
push str._MM_dd_yy
push 0
push 0
push 0x800
call dword [sym.imp.KERNEL32.dll_GetDateFormatA]
lea edi, [esp + 0x334]
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [esp + 0x10]
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
lea ecx, [esp + 0x338]
push ecx
push 1
push eax
push str.InstalledTime
push edx
call ebp
mov eax, dword [esp + 0x10]
push eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
push str.Driver_Installed_successfully._n
call fcn.00402220
mov eax, dword [esp + 0x18]
add esp, 4
test eax, eax
je 0x401c25
push str._Reboot_Required__n
call fcn.00402220
mov eax, dword [esp + 0x20]
add esp, 4
test eax, eax
jne 0x401c15
call fcn.00401ea0
pop edi
pop esi
pop ebp
mov eax, 0x102
pop ebx
add esp, 0x864
ret
pop edi
pop esi
pop ebp
mov eax, 0x100
pop ebx
add esp, 0x864
ret