Function at 0x41af80
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x18
push ebx
push ebp
push esi
push edi
mov edi, dword [esp + 0x34]
xor ebx, ebx
push edi
push str._keyData__04x
push 8
mov esi, ecx
push 0x44a470
mov dword [esp + 0x20], ebx
mov dword [esp + 0x34], ebx
call fcn.00406360
mov eax, edi
add esp, 0x10
shr eax, 0x18
test al, 1
je 0x41aff6
push str.__extended_
push 8
push 0x44a470
call fcn.00406360
mov eax, dword [esp + 0x3c]
add esp, 0xc
sub eax, 0xd
je 0x41afee
sub eax, 4
je 0x41afe4
dec eax
jne 0x41aff6
mov dword [esp + 0x30], 0xa5
jmp 0x41aff6
mov dword [esp + 0x30], 0xa3
jmp 0x41aff6
mov dword [esp + 0x30], 0x1234
mov edx, dword [esp + 0x30]
xor ecx, ecx
mov eax, 0x43c4f0
cmp dword [eax], edx
je 0x41b190
add eax, 8
inc ecx
cmp eax, 0x43c748
jb 0x41b001
push str.not_in_special_keymap_
push 8
push 0x44a470
call fcn.00406360
add esp, 0xc
lea edi, [esi + 4]
push edi
call dword [sym.imp.USER32.dll_GetKeyboardState]
mov edx, dword [esp + 0x30]
push ebx
push esi
push edi
push ebx
push edx
call dword [sym.imp.USER32.dll_ToAscii]
mov cl, byte [esi + 0x16]
mov ebp, eax
mov al, 0x80
test al, cl
je 0x41b132
test byte [esi + 0x15], al
je 0x41b132
cmp ebp, 1
jl 0x41b132
mov al, byte [esi]
cmp al, 0x20
jb 0x41b06c
cmp al, 0x7e
jbe 0x41b07c
cmp al, 0xa0
jb 0x41b132
cmp al, 0xff
ja 0x41b132
mov edi, dword [sym.imp.USER32.dll_GetKeyState]
push 0xa2
call edi
test ah, 0x80
je 0x41b097
mov ebx, 1
mov dword [esp + 0x24], ebx
push 0xa4
call edi
test ah, 0x80
je 0x41b0aa
or ebx, 4
mov dword [esp + 0x24], ebx
push 0xa5
call edi
test ah, 0x80
je 0x41b0bd
or ebx, 8
mov dword [esp + 0x24], ebx
test ebx, ebx
jne 0x41b0c9
mov dword [esp + 0x24], 0xd
push ebp
push str.Ctrl_Alt_pressed:_ToAscii__without_modifiers__returns__d_byte_s_:
push 8
push 0x44a470
call fcn.00406360
add esp, 0x10
xor edi, edi
test ebp, ebp
jle 0x41b112
lea ebx, [esp + 0x14]
mov dword [esp + 0x10], ebp
xor eax, eax
add ebx, 4
mov al, byte [edi + esi]
push eax
push eax
push str._02x___c_
push 8
mov dword [ebx - 4], eax
push 0x44a470
call fcn.00406360
add esp, 0x14
inc edi
cmp edi, ebp
jl 0x41b0ec
push 0x443ee4
push 8
push 0x44a470
call fcn.00406360
mov eax, dword [esp + 0x1c]
add esp, 0xc
test eax, eax
jne 0x41b297
push 0
lea eax, [esi + 4]
push esi
push eax
mov eax, dword [esp + 0x3c]
push 0
push eax
mov byte [esi + 0xa7], 0
mov byte [esi + 0xa6], 0
mov byte [esi + 0x15], 0
call dword [sym.imp.USER32.dll_ToAscii]
mov ebp, eax
test ebp, ebp
jge case.0x41b17c.44
xor eax, eax
mov al, byte [esi]
add eax, 0xffffffd9
cmp eax, 0x81
ja case.0x41b17c.44
xor ecx, ecx
mov cl, byte [eax + 0x41b2d8]
jmp dword [ecx*4 + 0x41b2c0]
mov dword [esp + 0x14], 0xfe50
jmp 0x41b239
mov esi, dword [ecx*8 + 0x43c4f4]
mov dword [esp + 0x10], 1
cmp esi, 0xffe9
mov dword [esp + 0x14], esi
je 0x41b1b3
cmp esi, 0xffea
jne 0x41b1d8
push 0x91
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
je 0x41b1d8
xor ecx, ecx
cmp esi, 0xffe9
setne cl
add ecx, 0xffe7
mov dword [esp + 0x14], ecx
push esi
push esi
push str.keymap_gives__u___x_
push 8
push 0x44a470
call fcn.00406360
add esp, 0x14
jmp 0x41b297
mov dword [esp + 0x14], 0xfe51
jmp 0x41b239
mov dword [esp + 0x14], 0xfe53
jmp 0x41b239
mov dword [esp + 0x14], 0xfe52
jmp 0x41b239
mov edi, dword [sym.imp.USER32.dll_GetKeyState]
push 0x11
call edi
test ah, 0x80
je 0x41b231
push 0x12
call edi
test ah, 0x80
mov dword [esp + 0x14], 0xfe53
jne 0x41b239
mov dword [esp + 0x14], 0xfe57
mov dword [esp + 0x10], 1
cmp ebp, 1
jl 0x41b297
push ebp
push str.ToAscii__without_ctrl__returns__d_byte_s_:
push 8
push 0x44a470
call fcn.00406360
add esp, 0x10
xor edi, edi
test ebp, ebp
jle 0x41b297
mov edx, dword [esp + 0x10]
mov eax, edx
add eax, ebp
lea ebx, [esp + edx*4 + 0x14]
mov dword [esp + 0x10], eax
xor eax, eax
add ebx, 4
mov al, byte [edi + esi]
push eax
push eax
push str._02x___c_
push 8
mov dword [ebx - 4], eax
push 0x44a470
call fcn.00406360
add esp, 0x14
inc edi
cmp edi, ebp
jl 0x41b271
mov eax, dword [esp + 0x10]
mov ecx, 5
lea esi, [esp + 0x14]
mov dword [esp + eax*4 + 0x14], 0xffffff
mov eax, dword [esp + 0x2c]
mov edi, eax
rep movsd dword es:[edi], dword [esi]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x18
ret 0xc