Function at 0x402e30
Capabilities:
Query or enumerate registry value
Set environment variable

Disassembly:
sub esp, 0x418
mov eax, dword [0x4205ac]
push ebx
push ebp
mov dword [esp + 0x41c], eax
push esi
xor eax, eax
xor esi, esi
push edi
mov ebp, esi
mov word [esp + 0x224], ax
mov word [esp + 0x24], ax
call fcn.00402c60
mov eax, dword [esp + 0x42c]
push eax
call fcn.00402a40
mov edi, dword [sym.imp.MSVCR71.dll_wcscat]
mov ebx, eax
mov al, byte [esp + 0x434]
add esp, 4
test al, 1
mov dword [esp + 0x20], edx
jne 0x402f60
lea ecx, [esp + 0x10]
push ecx
push 0x20019
push esi
push str.SOFTWARE_aheadShared
push reloc.OLEAUT32.dll_SysReAllocString
call dword [sym.imp.ADVAPI32.dll_RegOpenKeyExW]
mov eax, dword [esp + 0x10]
test eax, eax
je 0x402f60
lea edx, [esp + 0x14]
push edx
lea ecx, [esp + 0x28]
push ecx
lea edx, [esp + 0x20]
push edx
push esi
push str.NeroAPIUnicode
push eax
mov dword [esp + 0x2c], 0xff
call dword [sym.imp.ADVAPI32.dll_RegQueryValueExW]
test eax, eax
je 0x402ee5
mov eax, dword [esp + 0x10]
push eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
jmp 0x402f60
mov ecx, dword [esp + 0x10]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
lea edx, [esp + 0x24]
push edx
call dword [sym.imp.MSVCR71.dll_wcslen]
add esp, 4
cmp eax, 0xf3
jae 0x402f60
push 0xff
lea eax, [esp + 0x28]
push eax
lea ecx, [esp + 0x22c]
push ecx
call dword [sym.imp.MSVCR71.dll_wcsncpy]
xor eax, eax
add esp, 0xc
cmp word [esp + 0x224], 0x5c
mov word [esp + 0x422], ax
jne 0x402f3d
mov word [esp + 0x224], ax
lea edx, [esp + 0x224]
push str.uNeroAPI.dll
push edx
call edi
lea eax, [esp + 0x22c]
push eax
call fcn.00402a40
add esp, 0xc
mov ebp, eax
mov esi, edx
mov eax, dword [esp + 0x42c]
test eax, eax
je 0x40305a
mov edx, dword [esp + 0x20]
push esi
push ebp
push edx
push ebx
call fcn.00402b10
add esp, 0x10
test eax, eax
je 0x40305a
push esi
push ebp
push edx
push ebx
call fcn.00402b60
add esp, 0x10
test eax, eax
je 0x402fa5
test byte [esp + 0x430], 2
jne 0x40305a
push 0x416adc
call dword [sym.imp.MSVCR71.dll__wgetenv]
mov ecx, dword [esp + 0x430]
push ecx
mov ebp, eax
call dword [sym.imp.MSVCR71.dll__wcsdup]
mov ebx, eax
push 0x5c
push ebx
call dword [sym.imp.MSVCR71.dll_wcsrchr]
add esp, 0x10
test eax, eax
je 0x402fd7
mov word [eax], 0
push ebx
mov eax, ebp
call fcn.00402bb0
add esp, 4
test eax, eax
jne 0x40303d
mov esi, dword [sym.imp.MSVCR71.dll_wcslen]
push ebx
call esi
push ebp
mov dword [esp + 0x1c], eax
call esi
mov ecx, dword [esp + 0x1c]
add ecx, eax
lea edx, [ecx + ecx + 4]
push edx
call dword [sym.imp.MSVCR71.dll_malloc]
mov esi, eax
add esp, 0xc
test esi, esi
je 0x40303d
push ebx
push esi
call dword [sym.imp.MSVCR71.dll_wcscpy]
push 0x416ad8
push esi
call edi
push ebp
push esi
call edi
add esp, 0x18
push esi
push 0x416adc
call dword [sym.imp.KERNEL32.dll_SetEnvironmentVariableW]
push esi
call dword [sym.imp.MSVCR71.dll_free]
add esp, 4
push ebx
call dword [sym.imp.MSVCR71.dll_free]
mov eax, dword [esp + 0x430]
add esp, 4
push eax
call dword [sym.imp.KERNEL32.dll_LoadLibraryW]
jmp 0x403260
push 0x416adc
call dword [sym.imp.MSVCR71.dll__wgetenv]
lea ecx, [esp + 0x28]
push ecx
mov ebp, eax
call dword [sym.imp.MSVCR71.dll_wcslen]
mov ebx, eax
add esp, 8
test ebx, ebx
jbe 0x403250
lea edx, [esp + 0x24]
push edx
mov eax, ebp
call fcn.00402bb0
add esp, 4
test eax, eax
jne 0x4030e0
push ebp
call dword [sym.imp.MSVCR71.dll_wcslen]
add eax, ebx
lea eax, [eax + eax + 4]
push eax
call dword [sym.imp.MSVCR71.dll_malloc]
mov esi, eax
add esp, 8
test esi, esi
je 0x4030e0
lea ecx, [esp + 0x24]
push ecx
push esi
call dword [sym.imp.MSVCR71.dll_wcscpy]
push 0x416ad8
push esi
call edi
push ebp
push esi
call edi
add esp, 0x18
push esi
push 0x416adc
call dword [sym.imp.KERNEL32.dll_SetEnvironmentVariableW]
push esi
call dword [sym.imp.MSVCR71.dll_free]
add esp, 4
lea edx, [esp + 0x24]
push 0x3b
push edx
call dword [sym.imp.MSVCR71.dll_wcschr]
add esp, 8
test eax, eax
je 0x403250
push str.NeroErr.dll
call dword [sym.imp.MSVCR71.dll_wcslen]
add eax, ebx
lea eax, [eax + eax + 4]
push eax
call dword [sym.imp.MSVCR71.dll_malloc]
mov esi, eax
add esp, 8
test esi, esi
je 0x403152
lea ecx, [esp + 0x24]
push ecx
push esi
call dword [sym.imp.MSVCR71.dll_wcscpy]
push 0x4169c4
push esi
call edi
push str.NeroErr.dll
push esi
call edi
mov ebp, dword [sym.imp.KERNEL32.dll_LoadLibraryW]
add esp, 0x18
push esi
call ebp
push esi
mov dword [0x4209d8], eax
call dword [sym.imp.MSVCR71.dll_free]
add esp, 4
jmp 0x403158
mov ebp, dword [sym.imp.KERNEL32.dll_LoadLibraryW]
push str.newtrf.dll
call dword [sym.imp.MSVCR71.dll_wcslen]
add eax, ebx
lea edx, [eax + eax + 4]
push edx
call dword [sym.imp.MSVCR71.dll_malloc]
mov esi, eax
add esp, 8
test esi, esi
je 0x4031aa
lea eax, [esp + 0x24]
push eax
push esi
call dword [sym.imp.MSVCR71.dll_wcscpy]
push 0x4169c4
push esi
call edi
push str.newtrf.dll
push esi
call edi
add esp, 0x18
push esi
call ebp
push esi
mov dword [0x4209d4], eax
call dword [sym.imp.MSVCR71.dll_free]
add esp, 4
push str.NeRSDB.dll
call dword [sym.imp.MSVCR71.dll_wcslen]
add eax, ebx
lea ecx, [eax + eax + 4]
push ecx
call dword [sym.imp.MSVCR71.dll_malloc]
mov esi, eax
add esp, 8
test esi, esi
je 0x4031fc
lea edx, [esp + 0x24]
push edx
push esi
call dword [sym.imp.MSVCR71.dll_wcscpy]
push 0x4169c4
push esi
call edi
push str.NeRSDB.dll
push esi
call edi
add esp, 0x18
push esi
call ebp
push esi
mov dword [0x4209e0], eax
call dword [sym.imp.MSVCR71.dll_free]
add esp, 4
push str.CDCopy.dll
call dword [sym.imp.MSVCR71.dll_wcslen]
add eax, ebx
lea eax, [eax + eax + 4]
push eax
call dword [sym.imp.MSVCR71.dll_malloc]
mov esi, eax
add esp, 8
test esi, esi
je 0x403256
lea ecx, [esp + 0x24]
push ecx
push esi
call dword [sym.imp.MSVCR71.dll_wcscpy]
push 0x4169c4
push esi
call edi
push str.CDCopy.dll
push esi
call edi
add esp, 0x18
push esi
call ebp
push esi
mov dword [0x4209d0], eax
call dword [sym.imp.MSVCR71.dll_free]
add esp, 4
jmp 0x403256
mov ebp, dword [sym.imp.KERNEL32.dll_LoadLibraryW]
lea edx, [esp + 0x224]
push edx
call ebp
test eax, eax
mov dword [0x4209dc], eax
je 0x4032ad
mov esi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.NeroSetExpectedAPIVersionEx
push eax
call esi
test eax, eax
je 0x40328c
push 0
push 0
push 0
push 5
push 7
call eax
add esp, 0x14
jmp 0x4032b2
mov eax, dword [0x4209dc]
test eax, eax
je 0x4032b2
push str.NeroSetExpectedAPIVersion
push eax
call esi
test eax, eax
je 0x4032b2
push 0x1d4c
call eax
add esp, 4
jmp 0x4032b2
call fcn.00402c60
mov ecx, dword [0x4209dc]
pop edi
xor eax, eax
pop esi
test ecx, ecx
mov ecx, dword [esp + 0x41c]
pop ebp
setne al
pop ebx
call fcn.00412cbe
add esp, 0x418
ret