Function at 0x409980
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x404
push ebx
push esi
push edi
mov edi, dword [esp + 0x414]
mov al, byte [edi + 0x874]
lea ebx, [edi + 0x874]
test al, al
je 0x409bcb
push 0x14
call dword [sym.imp.USER32.dll_GetKeyState]
test ah, 0x80
jne 0x4099c2
push ebx
call fcn.00445110
add esp, 4
test eax, eax
jne 0x409b83
lea eax, [esp + 0x10]
push eax
push str.Type
push ebx
call fcn.00444cd0
add esp, 0xc
test eax, eax
jne 0x409b83
lea ecx, [esp + 0xc]
lea edx, [esp + 0x10]
push ecx
push 0x49f190
push edx
call fcn.0047e1c0
mov eax, dword [esp + 0x18]
add esp, 0xc
cmp eax, 0x22
je 0x409a0a
mov dword [esp + 0xc], 0x199
jmp 0x409b8b
lea eax, [esp + 0x10]
push ebp
push eax
push str.SourceDrive
push ebx
call fcn.00444cd0
add esp, 0xc
test eax, eax
jne 0x409ac1
mov al, byte [esp + 0x14]
test al, al
je 0x409ac1
mov dword [esp + 0x10], 0
mov ebp, 0x4f28d8
cmp byte [ebp], 0
je 0x409a7c
mov esi, ebp
lea eax, [esp + 0x14]
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x409a6f
test cl, cl
je 0x409a6b
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x409a6f
add eax, 2
add esi, 2
test cl, cl
jne 0x409a4b
xor eax, eax
jmp 0x409a74
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
je 0x409c3a
mov edx, dword [esp + 0x10]
add ebp, 0x78c
inc edx
cmp ebp, 0x4fed10
mov dword [esp + 0x10], edx
jl 0x409a3f
push 0x40
lea ecx, [esp + 0x18]
push 0x4d44b8
push ecx
push 0
call fcn.0046b7d0
push eax
push 0x1a8
call fcn.0046b4e0
mov edx, dword [edi + 0x18]
add esp, 0x10
push eax
push edx
call fcn.0046b480
add esp, 0x10
lea eax, [esp + 0x10]
push eax
push str.Stage
push ebx
call fcn.00444e60
add esp, 0xc
test eax, eax
pop ebp
jne 0x409b83
mov eax, dword [esp + 0xc]
test eax, eax
je 0x409aee
cmp eax, 1
jne 0x409b83
mov edx, dword [edi + 0x1a0]
mov esi, dword [sym.imp.USER32.dll_CheckDlgButton]
xor ecx, ecx
test eax, eax
setne cl
push ecx
push 0x46e
push edx
call esi
lea eax, [esp + 0xc]
push eax
push str.IgnoreReadErrors
push ebx
call fcn.00444e60
add esp, 0xc
test eax, eax
jne 0x409b83
mov eax, dword [esp + 0xc]
test eax, eax
je 0x409b2e
cmp eax, 1
jne 0x409b83
mov edx, dword [edi + 0x1a0]
xor ecx, ecx
test eax, eax
setne cl
push ecx
push 0x470
push edx
call esi
lea eax, [esp + 0xc]
push eax
push 0x49f624
push ebx
call fcn.00444e60
add esp, 0xc
test eax, eax
jne 0x409b83
mov ecx, dword [esp + 0xc]
mov edx, dword [edi + 0x1a0]
push eax
push ecx
push 0x405
push edx
call fcn.00471c30
push edi
call fcn.0045ff60
add esp, 0x14
test eax, eax
jne 0x409c09
mov dword [esp + 0xc], 0x19a
mov eax, dword [edi + 0x1b0]
push 0
push 0
push 0x402
push 0x407
push eax
call dword [sym.imp.USER32.dll_SendDlgItemMessageA]
mov ecx, dword [esp + 0xc]
push 0x30
push 0x4d44b8
push ebx
push ecx
call fcn.0046b4e0
mov edx, dword [edi + 0x18]
add esp, 8
push eax
push edx
call fcn.0046b480
add esp, 0x10
mov byte [ebx], 0
mov eax, dword [edi + 0x1a0]
mov esi, dword [sym.imp.USER32.dll_CheckDlgButton]
push 0
push 0x46e
push eax
call esi
mov ecx, dword [edi + 0x1a0]
push 0
push 0x470
push ecx
call esi
mov edx, dword [edi + 0x1a0]
push 0
push 0
push 0x405
push edx
call fcn.00471c30
add esp, 0x10
mov eax, dword [edi + 0x1a0]
push 0x4b32f0
push 0x473
push eax
call dword [sym.imp.USER32.dll_SetDlgItemTextA]
push 0
push edi
call fcn.0045b0a0
add esp, 8
mov eax, 1
pop edi
pop esi
pop ebx
add esp, 0x404
ret
mov eax, dword [esp + 0x10]
cmp eax, 0x1a
mov dword [edi + 0x1c0], eax
jge 0x409a93
push eax
mov eax, dword [edi + 0x1a0]
push 0x4a4
push eax
call fcn.0045f150
add esp, 0xc
jmp 0x409ac1