Function at 0x409600
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x408
mov eax, dword [0x4bacc0]
xor eax, esp
mov dword [esp + 0x404], eax
push ebx
push esi
mov esi, dword [esp + 0x414]
cmp byte [esi + 0x884], 0
lea ebx, [esi + 0x884]
push edi
je 0x409841
push 0x14
call dword [0x49e4ac]
test ax, ax
js 0x40964c
push ebx
call fcn.004322c0
test eax, eax
jne 0x4097f9
lea eax, [esp + 0x10]
push eax
push str.Type
push ebx
call fcn.00431e00
test eax, eax
jne 0x4097f9
lea ecx, [esp + 0xc]
push ecx
lea edx, [esp + 0x14]
push 0x49e59c
push edx
call fcn.0048108c
add esp, 0xc
cmp dword [esp + 0xc], 0x22
je 0x40968f
mov dword [esp + 0xc], 0x199
jmp 0x409801
lea eax, [esp + 0x10]
push eax
push str.SourceDrive
push ebx
call fcn.00431e00
test eax, eax
jne 0x409741
cmp byte [esp + 0x10], al
je 0x409741
push ebp
xor ebp, ebp
mov dword [esp + 0x10], ebp
mov edi, 0x4fd1b8
lea ecx, [ecx]
cmp byte [edi], 0
je 0x4096fd
mov ecx, edi
lea eax, [esp + 0x14]
jmp 0x4096d0
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4096f0
test dl, dl
je 0x4096ec
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4096f0
add eax, 2
add ecx, 2
test dl, dl
jne 0x4096d0
xor eax, eax
jmp 0x4096f5
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
je 0x4098be
add edi, 0x7ec
add ebp, 1
cmp edi, 0x509fb0
jl 0x4096c0
mov dword [esp + 0x10], ebp
push 0x40
push 0x4dec98
lea edx, [esp + 0x1c]
push edx
push 0
call fcn.0046da00
push eax
push 0x1a8
call fcn.0046d6b0
add esp, 0x10
push eax
mov eax, dword [esi + 0x18]
push eax
call fcn.00470860
add esp, 0x10
pop ebp
lea ecx, [esp + 0xc]
push ecx
push str.Stage
push ebx
call fcn.00432020
test eax, eax
jne 0x4097f9
mov eax, dword [esp + 0xc]
test eax, eax
je 0x40976a
cmp eax, 1
jne 0x4097f9
mov edi, dword [0x49e4b0]
xor edx, edx
test eax, eax
mov eax, dword [esi + 0x1a0]
setne dl
push edx
push 0x46e
push eax
call edi
lea ecx, [esp + 0xc]
push ecx
push str.IgnoreReadErrors
push ebx
call fcn.00432020
test eax, eax
jne 0x4097f9
mov eax, dword [esp + 0xc]
test eax, eax
je 0x4097a7
cmp eax, 1
jne 0x4097f9
xor edx, edx
test eax, eax
mov eax, dword [esi + 0x1a0]
setne dl
push edx
push 0x470
push eax
call edi
lea ecx, [esp + 0xc]
push ecx
push 0x49e93c
push ebx
call fcn.00432020
test eax, eax
jne 0x4097f9
mov edx, dword [esp + 0xc]
push eax
mov eax, dword [esi + 0x1a0]
push edx
push 0x405
push eax
call fcn.00474940
push esi
call fcn.00462810
add esp, 0x14
test eax, eax
jne 0x40987f
mov dword [esp + 0xc], 0x19a
mov ecx, dword [esi + 0x1b0]
push 0
push 0
push 0x402
push 0x407
push ecx
call dword [0x49e4b4]
mov edx, dword [esp + 0xc]
push 0x30
push 0x4dec98
push ebx
push edx
call fcn.0046d6b0
add esp, 8
push eax
mov eax, dword [esi + 0x18]
push eax
call fcn.00470860
add esp, 0x10
mov byte [ebx], 0
mov ecx, dword [esi + 0x1a0]
mov edi, dword [0x49e4b0]
push 0
push 0x46e
push ecx
call edi
mov edx, dword [esi + 0x1a0]
push 0
push 0x470
push edx
call edi
mov eax, dword [esi + 0x1a0]
push 0
push 0
push 0x405
push eax
call fcn.00474940
add esp, 0x10
mov ecx, dword [esi + 0x1a0]
push 0x49e5e0
push 0x473
push ecx
call dword [0x49e4c0]
push 0
push esi
call fcn.0045dd90
mov ecx, dword [esp + 0x418]
add esp, 8
pop edi
pop esi
pop ebx
xor ecx, esp
mov eax, 1
call fcn.004810ab
add esp, 0x408
ret
cmp ebp, 0x1a
mov dword [esp + 0x10], ebp
mov dword [esi + 0x1c0], ebp
jge 0x409712
mov ecx, dword [esi + 0x1a0]
push ebp
push 0x4a4
push ecx
call fcn.00461840
add esp, 0xc
jmp 0x409740