Function at 0x43e850
Capabilities:
Get common file path
Set registry value

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x228
push ebx
mov ebx, ecx
mov eax, dword [ebx + 0x320]
test eax, eax
je 0x43ecb5
push 0x100
lea eax, [ebp - 0x128]
push eax
call dword [sym.imp.KERNEL32.dll_GetWindowsDirectoryA]
lea eax, [ebp - 0x128]
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x43e885
sub eax, edx
cmp byte [ebp + eax - 0x129], 0x5c
push esi
push edi
je 0x43e8b3
lea edi, [ebp - 0x128]
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x43e8a1
mov cx, word [0x4b357c]
mov word [edi], cx
lea edi, [ebp - 0x128]
dec edi
lea ebx, [ebx]
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x43e8c0
mov edx, dword [str.popcinfo.dat]
mov eax, dword [0x4b3570]
mov ecx, dword [0x4b3574]
mov dword [edi], edx
mov dl, byte [0x4b3578]
mov dword [edi + 4], eax
lea eax, [ebp - 0x128]
mov dword [edi + 8], ecx
push 0x4b3568
push eax
mov byte [edi + 0xc], dl
call fcn.004806f9
mov edi, eax
add esp, 8
test edi, edi
je 0x43e9d3
push edi
push 2
lea ecx, [ebp - 2]
push 1
push ecx
call fcn.00480651
add esp, 0x10
test eax, eax
je 0x43e9e9
mov ax, word [ebp - 2]
cmp ax, 0x100
jae 0x43e995
movzx eax, ax
push edi
push 1
push eax
lea edx, [ebp - 0x228]
push edx
mov byte [ebp + eax - 0x228], 0
call fcn.00480651
mov eax, dword [ebx + 0x278]
add esp, 0x10
cmp eax, 0x10
jb 0x43e95c
mov esi, dword [ebx + 0x264]
jmp 0x43e962
lea esi, [ebx + 0x264]
lea eax, [ebp - 0x228]
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x43e98c
test cl, cl
je 0x43e988
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x43e98c
add eax, 2
add esi, 2
test cl, cl
jne 0x43e968
xor eax, eax
jmp 0x43e991
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
je 0x43e9ba
push 1
push 4
push edi
call fcn.00480278
push edi
push 2
lea eax, [ebp - 2]
push 1
push eax
call fcn.00480651
add esp, 0x1c
test eax, eax
jne 0x43e921
jmp 0x43e9e9
movzx ecx, word [ebp - 2]
mov edx, 0xfffffffe
push 1
sub edx, ecx
push edx
push edi
call fcn.00480278
add esp, 0xc
jmp 0x43e9e9
lea eax, [ebp - 0x128]
push 0x4b3564
push eax
call fcn.004806f9
add esp, 8
mov edi, eax
xor ecx, ecx
mov cx, word [ebx + 0x274]
push edi
push 2
lea edx, [ebp - 0xc]
push 1
push edx
mov dword [ebp - 0xc], ecx
call fcn.004800a4
mov eax, dword [ebx + 0x278]
mov esi, 0x10
add esp, 0x10
cmp eax, esi
jb 0x43ea1d
mov eax, dword [ebx + 0x264]
jmp 0x43ea23
lea eax, [ebx + 0x264]
movzx ecx, word [ebp - 0xc]
push edi
push 1
push ecx
push eax
call fcn.004800a4
push edi
push 4
lea eax, [ebx + 0x440]
push 1
push eax
call fcn.004800a4
push edi
call fcn.00480325
lea edi, [ebx + 0x30c]
push edi
lea edx, [ebp - 0x28]
push str.SOFTWARE_
push edx
call fcn.004064d0
mov ecx, dword [eax + 0x18]
add esp, 0x30
cmp ecx, esi
jb 0x43ea6c
mov eax, dword [eax + 4]
jmp 0x43ea6f
add eax, 4
lea ecx, [ebp - 8]
push ecx
push 0x20006
push 0
push eax
push reloc.OLEAUT32.dll_SysReAllocString
call dword [sym.imp.ADVAPI32.dll_RegOpenKeyExA]
mov dword [ebp - 4], eax
cmp dword [ebp - 0x10], esi
jb 0x43ea9a
mov edx, dword [ebp - 0x24]
push edx
call fcn.0047df89
add esp, 4
mov eax, dword [ebp - 4]
test eax, eax
je 0x43eb01
push edi
lea eax, [ebp - 0x28]
push str.SOFTWARE_
push eax
call fcn.004064d0
mov ecx, dword [eax + 0x18]
add esp, 0xc
cmp ecx, esi
jb 0x43eabf
mov eax, dword [eax + 4]
jmp 0x43eac2
add eax, 4
lea ecx, [ebp - 4]
push ecx
lea edx, [ebp - 8]
push edx
push 0
push 0xf003f
push 0
push 0x4b3560
push 0
push eax
push reloc.OLEAUT32.dll_SysReAllocString
call dword [sym.imp.ADVAPI32.dll_RegCreateKeyExA]
mov edi, eax
cmp dword [ebp - 0x10], esi
jb 0x43eaf9
mov eax, dword [ebp - 0x24]
push eax
call fcn.0047df89
add esp, 4
test edi, edi
jne 0x43ecb3
fld qword [ebx + 0x3a8]
fmul qword [0x4b3558]
call fcn.0047e73c
mov edx, dword [ebp - 8]
mov esi, dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
push 4
lea ecx, [ebp - 4]
push ecx
push 4
push 0
push str.MusicVolume
push edx
mov dword [ebp - 4], eax
call esi
fld qword [ebx + 0x3b0]
fmul qword [0x4b3558]
call fcn.0047e73c
mov ecx, dword [ebp - 8]
push 4
mov dword [ebp - 4], eax
lea eax, [ebp - 4]
push eax
push 4
push 0
push str.SfxVolume
push ecx
call esi
mov eax, dword [ebx + 0x3c8]
mov ecx, dword [ebp - 8]
xor edx, edx
push 4
test eax, eax
lea eax, [ebp - 4]
push eax
push 4
setg dl
push 0
push str.Muted
push ecx
mov dword [ebp - 4], edx
call esi
mov al, byte [ebx + 0x22c]
mov ecx, dword [ebp - 8]
xor edx, edx
push 4
test al, al
lea eax, [ebp - 4]
push eax
push 4
sete dl
push 0
push str.ScreenMode
push ecx
mov dword [ebp - 4], edx
call esi
mov al, byte [ebx + 0x43d]
mov ecx, dword [ebp - 8]
xor edx, edx
push 4
test al, al
lea eax, [ebp - 4]
push eax
push 4
setne dl
push 0
push str.CustomCursors
push ecx
mov dword [ebp - 4], edx
call esi
mov cl, byte [ebx + 0x250]
xor edx, edx
test cl, cl
mov ecx, dword [ebp - 8]
push 4
setne dl
lea eax, [ebp - 4]
push eax
push 4
push 0
push str.ITSuccess
mov dword [ebp - 4], edx
push ecx
call esi
mov ecx, dword [ebp - 8]
mov edx, dword [ebx + 0x440]
push 4
lea eax, [ebp - 4]
push eax
push 4
push 0
push str.TimesPlayed
push ecx
mov dword [ebp - 4], edx
call esi
mov ecx, dword [ebp - 8]
mov edx, dword [ebx + 0x364]
push 4
lea eax, [ebp - 4]
push eax
push 4
push 0
push str.LastVerCheckQueryTime
push ecx
mov dword [ebp - 4], edx
call esi
mov eax, dword [ebp - 8]
push 4
lea edx, [ebp - 4]
push edx
push 4
push 0
push str.InProgress
push eax
mov dword [ebp - 4], 0
call esi
mov eax, dword [ebx + 0x37c]
test eax, eax
jbe 0x43ec77
cmp dword [ebx + 0x380], 0x10
jb 0x43ec60
mov ecx, dword [ebx + 0x36c]
jmp 0x43ec66
lea ecx, [ebx + 0x36c]
push eax
push ecx
mov ecx, dword [ebp - 8]
push 1
push 0
push str.RegName
push ecx
call esi
mov eax, dword [ebx + 0x398]
test eax, eax
jbe 0x43eca9
cmp dword [ebx + 0x39c], 0x10
jb 0x43ec92
mov ebx, dword [ebx + 0x388]
jmp 0x43ec98
add ebx, 0x388
mov edx, dword [ebp - 8]
push eax
push ebx
push 1
push 0
push str.RegCode
push edx
call esi
mov eax, dword [ebp - 8]
push eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret