Function at 0x180020680
Capabilities:
Log keystrokes via polling

Disassembly:
mov qword [rsp + 0x18], rbx
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
lea rbp, [rsp - 0x1d0]
sub rsp, 0x2d0
mov rax, qword [0x180075010]
xor rax, rsp
mov qword [rbp + 0x1c0], rax
mov rdi, rdx
mov r14, rcx
mov qword [rsp + 0x28], rdx
mov rax, qword [rdx + 0x18]
mov qword [rsp + 0x20], rax
mov r9, qword [rdx + 0x10]
mov r8d, dword [rdx + 8]
mov rdx, qword [rdx]
call fcn.18001fe60
test eax, eax
jne 0x180020997
mov eax, dword [rdi + 8]
cmp eax, 0x104
ja 0x1800209c6
je case.0x180020717.256
add eax, 0xfffffff9
cmp eax, 0xfb
ja case.0x180020a48.518
lea rdx, [0x180000000]
movzx eax, byte [rdx + rax + 0x20dec]
mov ecx, dword [rdx + rax*4 + 0x20dd0]
add rcx, rdx
jmp rcx
lea rcx, [r14 + 0x1d8]
call fcn.180001000
mov r15, qword [r14 + 0x1e0]
mov r12d, dword [r14 + 0x1f0]
mov rdi, qword [r14 + 0x1e8]
test rdi, rdi
je 0x180020744
lock inc qword [rdi + 8]
mov qword [r14 + 0x1d8], 1
test rdi, rdi
je case.0x180020a48.518
lea rbx, [rdi + 0x18]
mov qword [rbp - 0x60], rbx
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_EnterCriticalSection]
nop
mov rax, qword [rdi + 0x10]
test rax, rax
jne 0x180020789
lea rcx, [rdi + 0x40]
call qword [sym.imp.KERNEL32.DLL_TryEnterCriticalSection]
test eax, eax
je 0x180020818
mov rax, qword [rdi + 0x10]
inc rax
mov qword [rdi + 0x10], rax
cmp qword [rdi + 0x68], 0
je 0x1800207ed
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
mov r8d, r12d
mov rdx, r14
mov rcx, qword [rdi + 0x68]
call r15
mov esi, eax
lea rbx, [rdi + 0x18]
mov qword [rsp + 0x30], rbx
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_EnterCriticalSection]
nop
sub qword [rdi + 0x10], 1
jne 0x1800207d4
lea rcx, [rdi + 0x40]
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
nop
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
mov rax, qword [rdi]
mov rcx, rdi
call qword [rax + 0x40]
test esi, esi
jmp 0x180020991
mov qword [rsp + 0x30], rbx
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_EnterCriticalSection]
nop
sub qword [rdi + 0x10], 1
jne 0x18002080e
lea rcx, [rdi + 0x40]
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
nop
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
nop
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
xor eax, eax
jmp 0x18002099c
lea rcx, [r14 + 0x1f8]
call fcn.180001000
mov r15, qword [r14 + 0x200]
mov r12d, dword [r14 + 0x210]
mov rdi, qword [r14 + 0x208]
test rdi, rdi
je 0x180020853
lock inc qword [rdi + 8]
mov qword [r14 + 0x1f8], 1
test rdi, rdi
je case.0x180020a48.518
lea rbx, [rdi + 0x18]
mov qword [rsp + 0x30], rbx
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_EnterCriticalSection]
nop
mov rax, qword [rdi + 0x10]
test rax, rax
jne 0x180020899
lea rcx, [rdi + 0x40]
call qword [sym.imp.KERNEL32.DLL_TryEnterCriticalSection]
test eax, eax
je 0x180020926
mov rax, qword [rdi + 0x10]
inc rax
mov qword [rdi + 0x10], rax
cmp qword [rdi + 0x68], 0
je 0x1800208fc
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
mov r8d, r12d
mov rdx, r14
mov rcx, qword [rdi + 0x68]
call r15
mov esi, eax
lea rbx, [rdi + 0x18]
mov qword [rbp - 0x60], rbx
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_EnterCriticalSection]
nop
sub qword [rdi + 0x10], 1
jne 0x1800208e3
lea rcx, [rdi + 0x40]
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
nop
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
mov rax, qword [rdi]
mov rcx, rdi
call qword [rax + 0x40]
test esi, esi
jmp 0x180020991
mov qword [rbp - 0x60], rbx
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_EnterCriticalSection]
nop
sub qword [rdi + 0x10], 1
jne 0x18002091c
lea rcx, [rdi + 0x40]
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
nop
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
nop
mov rcx, rbx
call qword [sym.imp.KERNEL32.DLL_LeaveCriticalSection]
xor eax, eax
jmp 0x18002099c
movzx edx, word [rdi + 0x10]
mov rcx, r14
call fcn.18001fd20
movsxd rcx, eax
test eax, eax
js 0x180020997
jle case.0x180020a48.518
mov qword [rdi + 0x10], rcx
xor eax, eax
jmp 0x18002099c
mov rax, qword [r14 + 0x18]
mov rcx, qword [rax + 0x70]
test rcx, rcx
je case.0x180020a48.518
call qword [sym.imp.USER32.dll_SetCursor]
jmp 0x180020997
mov rcx, qword [rdi + 0x10]
call fcn.180029a80
mov r8d, eax
and r8d, 0xe000
and eax, 0xffff1fff
mov edx, eax
mov rcx, r14
call fcn.18001fa80
test eax, eax
je case.0x180020a48.518
mov eax, 1
mov rcx, qword [rbp + 0x1c0]
xor rcx, rsp
call fcn.180038940
mov rbx, qword [rsp + 0x320]
add rsp, 0x2d0
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret
cmp eax, 0x208
ja 0x180020b19
cmp eax, 0x207
jae 0x1800209ed
cmp eax, 0x105
je case.0x180020717.257
add eax, 0xfffffe00
cmp eax, 5
ja case.0x180020a48.518
movsx esi, word [rdi + 0x18]
movsx r15d, word [rdi + 0x1a]
mov rax, qword [rdi + 0x10]
mov rcx, rax
shl rcx, 0xa
and ecx, 0x2000
mov ebx, ecx
bts ebx, 0xf
and al, 4
cmove ebx, ecx
mov ecx, 0x12
call qword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
jns 0x180020a26
bts ebx, 0xe
mov eax, dword [rdi + 8]
add eax, 0xfffffe00
cmp eax, 8
ja case.0x180020a48.518
lea rdx, [0x180000000]
mov eax, dword [rdx + rax*4 + 0x20ee8]
add rax, rdx
jmp rax
mov rcx, qword [rdi + 0x10]
call fcn.180029a80
mov r8d, eax
and r8d, 0xe000
and eax, 0xffff1fff
mov edx, eax
mov rcx, r14
call fcn.18001fbd0
jmp 0x18002098f
mov r9d, ebx
mov r8d, r15d
mov edx, esi
mov rcx, r14
call fcn.18001ee30
jmp 0x18002098f
mov r9d, ebx
mov r8d, r15d
mov edx, esi
mov rcx, r14
call fcn.18001ef90
jmp 0x18002098f
mov r9d, ebx
mov r8d, r15d
mov edx, esi
mov rcx, r14
call fcn.18001f0f0
jmp 0x18002098f
mov r9d, ebx
mov r8d, r15d
mov edx, esi
mov rcx, r14
call fcn.18001f250
jmp 0x18002098f
mov r9d, ebx
mov r8d, r15d
mov edx, esi
mov rcx, r14
call fcn.18001f3b0
jmp 0x18002098f
mov r9d, ebx
mov r8d, r15d
mov edx, esi
mov rcx, r14
call fcn.18001f510
jmp 0x18002098f
mov r9d, ebx
mov r8d, r15d
mov edx, esi
mov rcx, r14
call fcn.18001f670
jmp 0x18002098f
mov r9d, ebx
mov r8d, r15d
mov edx, esi
mov rcx, r14
call fcn.18001f7d0
jmp 0x18002098f
sub eax, 0x20a
je 0x180020d6d
cmp eax, 0x29
jne case.0x180020a48.518
mov r12, qword [rdi + 0x10]
xor r9d, r9d
xor r8d, r8d
mov edx, 0xffffffff
mov rcx, r12
call qword [sym.imp.SHELL32.dll_DragQueryFileW]
mov r15d, eax
lea rcx, vtable.CVolCommonBaseWithMemManager.0
mov qword [rsp + 0x40], rcx
lea rdx, vtable.CVolObject.0
mov qword [rsp + 0x40], rdx
xor r13d, r13d
mov qword [rsp + 0x48], r13
mov qword [rsp + 0x50], r13
lea rax, vtable.rg_n323::rg_n2474.0
mov qword [rsp + 0x40], rax
lea rax, vtable.rg_n323::rg_n2049.0
mov qword [rsp + 0x40], rax
lea rax, [rsp + 0x58]
mov qword [rsp + 0x30], rax
mov qword [rsp + 0x58], rcx
lea rbx, vtable.CMStringArray.0
mov qword [rsp + 0x58], rbx
lea rax, [rsp + 0x60]
mov qword [rbp - 0x60], rax
mov qword [rsp + 0x60], rcx
mov qword [rsp + 0x60], rdx
mov qword [rsp + 0x68], r13
mov qword [rsp + 0x70], r13
lea rax, vtable.CVolMem.0
mov qword [rsp + 0x60], rax
mov qword [rsp + 0x78], r13
mov qword [rbp - 0x78], r13
mov qword [rbp - 0x80], r13
mov qword [rbp - 0x70], 0x40
mov qword [rbp - 0x70], 0x100
mov esi, r13d
test r15d, r15d
je 0x180020ca3
nop dword [rax]
nop word [rax + rax]
mov r9d, 0x104
lea r8, [rbp - 0x50]
mov edx, esi
mov rcx, r12
call qword [sym.imp.SHELL32.dll_DragQueryFileW]
lea rax, [rbp - 0x50]
mov rbx, 0xffffffffffffffff
inc rbx
cmp word [rax + rbx*2], 0
jne 0x180020c20
test rbx, rbx
jle 0x180020c5b
add rbx, rbx
lea rdx, [rbx + 2]
lea rcx, [rsp + 0x58]
mov rax, qword [rsp + 0x58]
call qword [rax]
mov rdi, rax
mov r8, rbx
lea rdx, [rbp - 0x50]
mov rcx, rax
call fcn.18003a6b0
mov word [rdi + rbx], r13w
jmp 0x180020c5e
mov rdi, r13
mov rax, qword [rbp - 0x80]
mov rbx, qword [rbp - 0x78]
sub rax, rbx
cmp rax, 8
jl 0x180020c7f
mov rax, qword [rsp + 0x78]
mov qword [rax + rbx], rdi
add qword [rbp - 0x78], 8
jmp 0x180020c91
lea rdx, [rbx + 8]
lea rcx, [rsp + 0x60]
call fcn.18002a210
mov qword [rax + rbx], rdi
inc esi
cmp esi, r15d
jb 0x180020c00
lea rbx, vtable.CMStringArray.0
mov rcx, r12
call qword [sym.imp.SHELL32.dll_DragFinish]
cmp qword [rbp - 0x78], 0
je 0x180020cc1
lea rdx, [rsp + 0x40]
mov rcx, r14
call fcn.180020140
nop
lea rax, [rsp + 0x58]
mov qword [rsp + 0x30], rax
mov qword [rsp + 0x58], rbx
mov rdx, qword [rsp + 0x78]
mov rsi, rdx
mov rdi, qword [rbp - 0x78]
test rdi, rdi
cmove rsi, r13
shr rdi, 3
mov rbx, r13
test rdi, rdi
je 0x180020d13
nop
mov rdx, qword [rsi + rbx*8]
test rdx, rdx
je 0x180020d06
lea rcx, [rsp + 0x58]
mov rax, qword [rsp + 0x58]
call qword [rax + 0x18]
inc rbx
cmp rbx, rdi
jl 0x180020cf0
mov rdx, qword [rsp + 0x78]
test rdx, rdx
je 0x180020d25
lea rcx, [rsp + 0x60]
mov rax, qword [rsp + 0x60]
call qword [rax + 0x18]
mov qword [rsp + 0x78], r13
mov qword [rbp - 0x78], r13
mov qword [rbp - 0x80], r13
lea rax, [rsp + 0x60]
mov qword [rsp + 0x30], rax
lea rax, vtable.CVolMem.0
mov qword [rsp + 0x60], rax
mov qword [rsp + 0x78], r13
mov qword [rbp - 0x78], r13
mov qword [rbp - 0x80], r13
lea rax, vtable.CVolObject.0
mov qword [rsp + 0x60], rax
mov qword [rsp + 0x40], rax
xor eax, eax
jmp 0x18002099c
mov rax, qword [rdi + 0x10]
mov rcx, rax
shl rcx, 0xa
and ecx, 0x2000
mov ebx, ecx
bts ebx, 0xf
and al, 4
cmove ebx, ecx
mov ecx, 0x12
call qword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
jns 0x180020d9d
bts ebx, 0xe
movsx ecx, word [rdi + 0x12]
mov eax, 0x88888889
imul ecx
add edx, ecx
sar edx, 6
mov eax, edx
shr eax, 0x1f
add edx, eax
mov r8d, ebx
mov rcx, r14
call fcn.18001f930
test eax, eax
jne 0x180020997
xor eax, eax
jmp 0x18002099c