Function at 0x609620
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x87a415
mov eax, dword fs:[0]
push eax
sub esp, 0x94
push ebx
push ebp
push esi
push edi
mov eax, dword [0x8ce6f4]
xor eax, esp
push eax
lea eax, [esp + 0xa8]
mov dword fs:[0], eax
mov esi, ecx
mov eax, dword [esi + 0xf88]
mov ecx, dword [esi + 0xf90]
mov edx, dword [esi + 0xf98]
xor edi, edi
mov dword [esp + 0x78], eax
mov dword [esp + 0x7c], ecx
mov dword [esp + 0x80], edx
mov byte [esp + 0x1f], 0
mov dword [esp + 0x18], edi
mov eax, dword [esi + 0x1034]
mov dword [esp + 0xb0], edi
mov dword [esp + 0x40], edi
cmp eax, edi
je 0x6096b9
lea ecx, [esp + 0x58]
push ecx
push 0x43ba20
mov dword [esp + 0x60], edi
call eax
mov ecx, dword [esi + 0x1038]
mov dword [esp + 0x40], eax
cmp ecx, edi
je 0x6096b9
push 1
push eax
call ecx
push 8
lea edx, [esp + 0x74]
push edx
call dword [sym.imp.WINMM.dll_timeGetDevCaps]
mov ecx, dword [esp + 0x70]
xor eax, eax
cmp eax, ecx
sbb eax, eax
and eax, ecx
mov ecx, dword [esp + 0x74]
cmp eax, ecx
jae 0x6096e0
mov dword [esp + 0x44], eax
jmp 0x6096e6
mov eax, ecx
mov dword [esp + 0x44], ecx
push eax
call dword [sym.imp.WINMM.dll_timeBeginPeriod]
lea ecx, [ecx]
mov ecx, esi
mov dword [esi + 0x5d0], 1
mov byte [esp + 0x17], 0
call fcn.005ff0e0
call fcn.00802da0
mov ecx, esi
mov dword [esp + 0x28], eax
call fcn.005ff0e0
fmul qword [0x405058]
call fcn.00802da0
mov ecx, esi
mov dword [esp + 0x20], eax
call fcn.005ff0e0
fmul qword [0x43ba18]
call fcn.00802da0
mov dword [esp + 0x2c], eax
call fcn.00533c70
fld qword [eax + 0x58]
cmp dword [esi + 0xfb0], 2
fstp qword [esp + 0x8c]
mov dword [esp + 0x24], eax
je 0x609764
cmp byte [esi + 0xfa6], 0
jne 0x609b51
cmp dword [esp + 0x18], 0
jne 0x609b51
lea edi, [esi + 0xfb8]
push edi
mov dword [esp + 0x34], edi
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
xor ebx, ebx
mov byte [esp + 0xb0], 1
cmp dword [esi + 0x1008], ebx
jle 0x6097bc
lea ecx, [esp + 0x48]
push ecx
lea ecx, [esi + 0x1000]
call fcn.004d3b30
mov ecx, dword [eax]
mov dword [eax], ebx
mov eax, dword [esp + 0x48]
mov dword [esp + 0x18], ecx
test eax, eax
je 0x6097c1
mov edx, dword [eax]
push eax
mov eax, dword [edx + 8]
call eax
jmp 0x6097c1
mov ebx, 0xc00d4a3e
push edi
mov byte [esp + 0xb4], 0
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
test ebx, ebx
js 0x609b51
cmp byte [esi + 0xfa6], 0
mov ecx, dword [esi + 0xe90]
mov edx, dword [esi + 0xe94]
lea ebx, [esi + 0xe90]
mov dword [esi + 0xe98], ecx
mov dword [esi + 0xe9c], edx
jne 0x609815
mov byte [esi + 0xfa6], 1
mov dword [esi + 0x5d0], 0
jmp 0x609b51
mov eax, dword [esp + 0x18]
mov ecx, dword [eax]
mov edx, dword [ecx + 0x8c]
push ebx
push eax
call edx
test eax, eax
js 0x609b51
mov eax, dword [esi + 0xe98]
cmp eax, dword [ebx]
jne 0x609863
mov ecx, dword [esi + 0xe9c]
cmp ecx, dword [ebx + 4]
jne 0x609863
mov edi, dword [esp + 0x18]
push 1
push edi
mov ecx, esi
call fcn.006045e0
mov edx, dword [edi]
mov eax, dword [edx + 8]
push edi
call eax
xor eax, eax
mov dword [esp + 0x18], eax
jmp 0x609b4b
mov eax, dword [esi + 0xf68]
mov ecx, dword [eax]
lea edx, [esp + 0x9c]
push edx
lea edx, [esp + 0x38]
push edx
push 0
push eax
mov eax, dword [ecx + 0x10]
call eax
mov ecx, dword [ebx]
sub ecx, dword [esp + 0x34]
mov edx, dword [ebx + 4]
sbb edx, dword [esp + 0x38]
push 0
push 0x2710
push edx
push ecx
call fcn.00803a40
cmp byte [esi + 0xfb4], 0
mov dword [esi + 0x5d0], eax
je 0x6098b9
mov dword [esi + 0x5d0], 0
jmp 0x609b51
mov ecx, dword [esp + 0x24]
cmp dword [ecx + 0x44], 0
je 0x609b21
mov edi, dword [esp + 0x28]
mov ebp, edi
neg ebp
cmp eax, ebp
jge 0x6098e7
mov edx, dword [esi + 0xf98]
push edx
call dword [sym.imp.KERNEL32.dll_SetEvent]
mov byte [esi + 0xf9c], 1
mov eax, dword [esi + 0xf04]
test eax, eax
je 0x6098fe
mov ecx, dword [eax]
lea edx, [esp + 0x64]
push edx
push eax
mov eax, dword [ecx + 0xc]
call eax
mov ecx, dword [esi + 0x5e0]
sub ecx, dword [esp + 0x64]
mov edx, dword [esi + 0x5e4]
sbb edx, dword [esp + 0x68]
push 0
push 0x2710
push edx
push ecx
call fcn.00803a40
mov dword [esp + 0x30], eax
cdq
xor eax, edx
sub eax, edx
cmp eax, edi
jle 0x609931
mov dword [esp + 0x30], ebp
mov ecx, esi
call fcn.005ff0e0
fiadd dword [esp + 0x30]
fsub qword [esp + 0x8c]
fmul qword [0x434b50]
call fcn.00802dd6
mov ecx, dword [ebx + 4]
mov edi, eax
mov eax, dword [ebx]
mov dword [esp + 0x5c], eax
add eax, dword [esi + 0xeb0]
mov dword [esp + 0x60], ecx
adc ecx, dword [esi + 0xeb4]
mov dword [esp + 0x84], eax
mov eax, edi
add eax, dword [esp + 0x34]
mov ebp, edx
mov dword [esp + 0x94], eax
mov eax, ebp
adc eax, dword [esp + 0x38]
cmp eax, ecx
jg 0x6099e4
jl 0x60999b
mov eax, dword [esp + 0x84]
cmp dword [esp + 0x94], eax
jae 0x6099e4
mov eax, dword [esi + 0xeb0]
add eax, dword [ebx]
mov dword [esp + 0x4c], eax
mov eax, dword [esi + 0xeb4]
adc eax, dword [ebx + 4]
mov dword [esp + 0x50], eax
mov ebx, eax
mov ecx, esi
call fcn.005ff0e0
fmul qword [0x434b50]
call fcn.00802dd6
add edi, eax
adc ebp, edx
mov ecx, edi
add ecx, dword [esp + 0x34]
mov eax, ebp
adc eax, dword [esp + 0x38]
cmp eax, ebx
jl 0x6099b6
jg 0x6099e4
cmp ecx, dword [esp + 0x4c]
jb 0x6099b6
xor ebx, ebx
push ebx
push 0x2710
push ebp
push edi
call fcn.00803a40
sub edi, dword [esp + 0x5c]
mov ecx, dword [esi + 0xebc]
sbb ebp, dword [esp + 0x60]
add edi, dword [esp + 0x34]
push ebx
adc ebp, dword [esp + 0x3c]
push 0x2710
push ebp
push edi
mov dword [esi + 0x5d0], eax
mov dword [esi + 0xec0], ecx
call fcn.00803a40
mov edx, dword [esp + 0x28]
inc edx
mov dword [esi + 0xebc], eax
cmp eax, edx
jle 0x609a45
mov eax, dword [esi + 0xf98]
push eax
call dword [sym.imp.KERNEL32.dll_SetEvent]
mov byte [esi + 0xf9c], 1
cmp byte [esi + 0x5d4], bl
je 0x609b21
mov eax, dword [esi + 0xec0]
mov ecx, dword [esi + 0xebc]
mov edi, dword [esp + 0x20]
mov edx, eax
sub edx, ecx
cmp edx, edi
jle 0x609a8e
mov eax, dword [esp + 0x2c]
imul eax, eax, 0x2710
cdq
neg eax
adc edx, ebx
neg edx
mov byte [esi + 0xec4], bl
mov dword [esi + 0xeb0], eax
mov dword [esi + 0xeb4], edx
jmp 0x609acd
mov edx, ecx
sub edx, eax
mov eax, dword [esp + 0x2c]
cmp edx, edi
jle 0x609ab6
imul eax, eax, 0x2710
cdq
mov byte [esi + 0xec4], 1
mov dword [esi + 0xeb0], eax
mov dword [esi + 0xeb4], edx
jmp 0x609acd
lea edx, [eax + eax*2]
cmp ecx, edx
jge 0x609acd
cmp ecx, eax
jle 0x609acd
mov dword [esi + 0xeb0], ebx
mov dword [esi + 0xeb4], ebx
cmp ecx, edi
jge 0x609aef
cmp dword [esi + 0xeb4], ebx
jl 0x609aef
jg 0x609ae3
cmp dword [esi + 0xeb0], ebx
jbe 0x609aef
mov dword [esi + 0xeb0], ebx
mov dword [esi + 0xeb4], ebx
cmp ecx, ebx
jge 0x609aff
mov dword [esi + 0xeb0], ebx
mov dword [esi + 0xeb4], ebx
cmp ecx, edi
jle 0x609b21
cmp dword [esi + 0xeb4], ebx
jg 0x609b21
jl 0x609b15
cmp dword [esi + 0xeb0], ebx
jae 0x609b21
mov dword [esi + 0xeb0], ebx
mov dword [esi + 0xeb4], ebx
cmp dword [esi + 0x5d0], 0
jge 0x609b3e
mov eax, dword [esi + 0xf98]
push eax
call dword [sym.imp.KERNEL32.dll_SetEvent]
mov byte [esi + 0xf9c], 1
mov eax, 0x3e8
cmp dword [esi + 0x5d0], eax
jle 0x609b51
mov dword [esi + 0x5d0], eax
mov ecx, dword [esi + 0x5d0]
push ecx
push 0
lea edx, [esp + 0x80]
push edx
push 3
call dword [sym.imp.KERNEL32.dll_WaitForMultipleObjects]
cmp eax, 2
ja 0x609d2f
je 0x609c1e
sub eax, 0
mov ebx, dword [esp + 0x18]
je 0x609c17
dec eax
jne 0x609c59
test ebx, ebx
je 0x609ba9
push 1
push ebx
mov ecx, esi
call fcn.006045e0
mov eax, dword [ebx]
mov ecx, dword [eax + 8]
push ebx
call ecx
xor ebx, ebx
mov dword [esp + 0x18], ebx
lea edi, [esi + 0x10]
push edi
mov dword [esp + 0x24], edi
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
lea ebp, [esi + 0xfb8]
push ebp
mov dword [esp + 0x28], ebp
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
mov ecx, esi
mov byte [esp + 0xb0], 3
call fcn.006046a0
push ebp
mov ebp, dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
call ebp
push edi
mov byte [esp + 0xb4], 0
call ebp
mov edx, dword [esi + 0xf90]
push edx
mov byte [esi + 0xf94], 0
call dword [sym.imp.KERNEL32.dll_ResetEvent]
mov byte [esi + 0xfa6], 0
mov dword [esi + 0xebc], 0
mov byte [esp + 0x17], 1
jmp 0x609c59
mov byte [esp + 0x1f], 1
jmp 0x609c59
mov edx, dword [esi + 0xf98]
mov eax, dword [esi + 0xe98]
mov ecx, dword [esi + 0xe9c]
inc dword [esi + 0x660]
push edx
mov dword [esi + 0xe90], eax
mov dword [esi + 0xe94], ecx
mov byte [esi + 0xf9c], 0
call dword [sym.imp.KERNEL32.dll_ResetEvent]
mov byte [esp + 0x17], 1
mov ebx, dword [esp + 0x18]
test ebx, ebx
je 0x60a063
cmp byte [esp + 0x17], 0
je 0x60a063
lea eax, [esi + 0xfb8]
push eax
mov dword [esp + 0x2c], eax
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
lea edi, [esi + 0x5cc]
push edi
mov byte [esp + 0xb4], 8
call dword [sym.imp.KERNEL32.dll_InterlockedDecrement]
cmp byte [esi + 0xfa5], 0
je 0x609cbb
cmp dword [edi], 0
jne 0x609cbb
mov eax, dword [esi + 0xf74]
push 0
push 0
mov byte [esi + 0xfa5], 0
mov ecx, dword [eax]
mov edx, dword [ecx + 0xc]
push 1
push eax
call edx
mov eax, dword [esi + 0xfec]
lea ecx, [esi + 0xfe8]
mov dword [esp + 0x24], eax
call fcn.005dfd30
mov ebp, dword [esi + 0xff8]
mov ecx, dword [ebp]
mov dword [esp + 0x30], ebp
mov dword [esp + 0x20], ecx
mov dword [esp + 0x2c], ebp
mov byte [esp + 0xb0], 9
test ebp, ebp
je 0x609cfc
mov dword [ebp + 8], ebx
mov edx, dword [ebx]
mov eax, dword [edx + 4]
push ebx
call eax
mov ecx, dword [esp + 0x20]
mov edx, dword [esp + 0x24]
mov dword [esi + 0xff8], ecx
mov dword [ebp + 4], edx
mov dword [ebp], 0
mov eax, dword [esi + 0xfec]
inc dword [esi + 0xff0]
test eax, eax
je 0x60a034
mov dword [eax], ebp
jmp 0x60a03a
cmp eax, 0x102
jne 0x609c55
mov eax, dword [esi + 0xfa0]
cmp eax, 0xffffffff
je 0x609d4e
mov ecx, dword [esp + 0x24]
cmp eax, dword [ecx + 0x38]
jne 0x609d5b
cmp byte [esi + 0xfa4], 0
je 0x609e32
mov ebx, dword [esp + 0x18]
test ebx, ebx
je 0x609de0
lea edi, [esi + 0xfb8]
push edi
mov dword [esp + 0x24], edi
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
lea ebp, [esi + 0x5cc]
push ebp
mov byte [esp + 0xb4], 4
call dword [sym.imp.KERNEL32.dll_InterlockedDecrement]
cmp byte [esi + 0xfa5], 0
je 0x609db7
cmp dword [ebp], 0
jne 0x609db7
mov eax, dword [esi + 0xf74]
push 0
push 0
mov byte [esi + 0xfa5], 0
mov edx, dword [eax]
push 1
push eax
mov eax, dword [edx + 0xc]
call eax
lea ecx, [esi + 0xfe8]
push ebx
call fcn.004c4110
push edi
mov byte [esp + 0xb4], 0
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
mov ecx, dword [ebx]
mov edx, dword [ecx + 8]
push ebx
call edx
xor ebx, ebx
mov dword [esp + 0x18], ebx
lea edi, [esi + 0x10]
push edi
mov dword [esp + 0x24], edi
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
lea ebp, [esi + 0xfb8]
push ebp
mov dword [esp + 0x28], ebp
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
mov ecx, esi
mov byte [esp + 0xb0], 6
call fcn.006046a0
push ebp
mov ebp, dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
call ebp
push edi
mov byte [esp + 0xb4], 0
call ebp
mov ecx, esi
call fcn.006092b0
mov byte [esi + 0xfa4], 0
jmp 0x609e36
mov ebx, dword [esp + 0x18]
cmp byte [esi + 0x8d], 0
je 0x609efb
test ebx, ebx
je 0x609ec4
lea edi, [esi + 0xfb8]
push edi
mov dword [esp + 0x24], edi
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
lea ebp, [esi + 0x5cc]
push ebp
mov byte [esp + 0xb4], 7
call dword [sym.imp.KERNEL32.dll_InterlockedDecrement]
cmp byte [esi + 0xfa5], 0
je 0x609e9b
cmp dword [ebp], 0
jne 0x609e9b
mov eax, dword [esi + 0xf74]
push 0
push 0
mov byte [esi + 0xfa5], 0
mov ecx, dword [eax]
mov edx, dword [ecx + 0xc]
push 1
push eax
call edx
lea ecx, [esi + 0xfe8]
push ebx
call fcn.004c4110
push edi
mov byte [esp + 0xb4], 0
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
mov eax, dword [ebx]
mov ecx, dword [eax + 8]
push ebx
call ecx
xor ebx, ebx
mov dword [esp + 0x18], ebx
cmp byte [esi + 0x8c], 0
jne 0x609c59
mov byte [esi + 0x8c], 1
call fcn.007c9a2f
mov eax, dword [eax + 4]
mov eax, dword [eax + 0x20]
mov edx, dword [eax + 0x20]
push 0
push 0
push 0x8002
push edx
call dword [sym.imp.USER32.dll_PostMessageW]
jmp 0x609c59
mov eax, dword [esi + 0x1020]
xor edi, edi
cmp eax, edi
jge 0x609f1d
inc dword [esi + 0x660]
mov dword [esi + 0x1020], edi
mov byte [esp + 0x17], 1
jmp 0x609c59
cmp ebx, edi
je 0x60a063
cmp eax, edi
jle 0x609fc9
mov eax, dword [ebx]
mov edx, dword [eax + 0x1c]
lea ecx, [esi + 0x5c8]
push ecx
push 0x43a384
push ebx
call edx
cmp byte [0x8d2d02], 0
jne 0x609f6d
mov eax, dword [esi + 0xe90]
add eax, dword [0x8d46a0]
mov ecx, dword [esi + 0xe94]
adc ecx, dword [0x8d46a4]
lea edx, [esi + 0xc]
push ecx
push eax
push edx
call fcn.00630ac0
mov ecx, dword [esi + 0xc]
mov edx, dword [ecx + 0x18]
lea eax, [esi + 0xc]
push 1
push eax
call edx
mov eax, dword [esi + 0x1020]
cmp eax, edi
jle 0x609fb9
cmp eax, 1
je 0x609fa1
dec eax
inc dword [esi + 0x668]
mov dword [esi + 0x1020], eax
mov byte [esp + 0x17], 1
jmp 0x609c59
mov eax, dword [esi + 0xf74]
mov ecx, dword [eax]
mov edx, dword [ecx + 0xc]
push edi
push edi
push 0x24
push eax
call edx
mov dword [esi + 0x1020], edi
inc dword [esi + 0x668]
mov byte [esp + 0x17], 1
jmp 0x609c59
cmp byte [esi + 0xfb4], 0
jne 0x609c59
mov eax, dword [ebx]
mov edx, dword [eax + 0x1c]
lea ecx, [esi + 0x5c8]
push ecx
push 0x43a384
push ebx
call edx
cmp byte [0x8d2d02], 0
jne 0x60a016
mov eax, dword [esi + 0xe90]
add eax, dword [0x8d46a0]
mov ecx, dword [esi + 0xe94]
adc ecx, dword [0x8d46a4]
lea edx, [esi + 0xc]
push ecx
push eax
push edx
call fcn.00630ac0
mov ecx, dword [esi + 0xc]
mov edx, dword [ecx + 0x18]
lea eax, [esi + 0xc]
push 1
push eax
call edx
inc dword [esi + 0x668]
mov byte [esp + 0x17], 1
jmp 0x609c59
mov dword [esi + 0xfe8], ebp
mov eax, dword [esp + 0x28]
push eax
mov dword [esi + 0xfec], ebp
mov byte [esp + 0xb4], 0
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
mov ecx, dword [ebx]
mov edx, dword [ecx + 8]
push ebx
call edx
mov dword [esp + 0x18], 0
cmp byte [esp + 0x1f], 0
je 0x6096f0
mov edi, dword [esp + 0x18]
test edi, edi
je 0x60a0f3
lea ebx, [esi + 0xfb8]
push ebx
mov dword [esp + 0x24], ebx
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
lea ebp, [esi + 0x5cc]
push ebp
mov byte [esp + 0xb4], 0xb
call dword [sym.imp.KERNEL32.dll_InterlockedDecrement]
cmp byte [esi + 0xfa5], 0
je 0x60a0ca
cmp dword [ebp], 0
jne 0x60a0ca
mov eax, dword [esi + 0xf74]
push 0
push 0
mov byte [esi + 0xfa5], 0
mov ecx, dword [eax]
mov edx, dword [ecx + 0xc]
push 1
push eax
call edx
lea ecx, [esi + 0xfe8]
push edi
call fcn.004c4110
push ebx
mov byte [esp + 0xb4], 0
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
mov eax, dword [edi]
mov ecx, dword [eax + 8]
push edi
call ecx
xor edi, edi
mov dword [esp + 0x18], edi
mov edx, dword [esp + 0x44]
push edx
call dword [sym.imp.WINMM.dll_timeEndPeriod]
mov esi, dword [esi + 0x103c]
test esi, esi
je 0x60a10f
mov eax, dword [esp + 0x40]
push eax
call esi
mov dword [esp + 0xb0], 0xffffffff
test edi, edi
je 0x60a126
mov ecx, dword [edi]
mov edx, dword [ecx + 8]
push edi
call edx
mov ecx, dword [esp + 0xa8]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret