Function at 0x456664
Capabilities:
Get keyboard layout

Disassembly:
push ebp
mov ebp, esp
add esp, 0xfffffff8
push ebx
push esi
push edi
mov dword [ebp - 8], edx
mov dword [ebp - 4], eax
xor edx, edx
push ebp
push 0x456d1e
push dword fs:[edx]
mov dword fs:[edx], esp
mov eax, dword [ebp - 8]
xor edx, edx
mov dword [eax + 0xc], edx
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xa8]
mov ebx, dword [eax + 8]
dec ebx
test ebx, ebx
jl 0x4566cc
inc ebx
xor esi, esi
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xa8]
mov edx, esi
call fcn.0041586c
mov edi, eax
mov edx, dword [ebp - 8]
mov eax, dword [edi + 4]
call dword [edi]
test al, al
je 0x4566c8
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x456d33
inc esi
dec ebx
jne 0x45669d
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.00456518
mov ebx, dword [ebp - 8]
mov ebx, dword [ebx]
mov eax, ebx
cmp eax, 0x53
jg 0x456795
je 0x456c33
cmp eax, 0x16
jg 0x45675c
je 0x4569f8
cmp eax, 0x14
ja case.0x456701.1
jmp dword [eax*4 + 0x456708]
cmp eax, 0x1d
jg 0x45677e
je 0x456cd7
sub eax, 0x1a
je 0x456cb1
sub eax, 2
je 0x4568f7
jmp case.0x456701.1
sub eax, 0x37
je 0x4568c3
sub eax, 0x13
je 0x456a14
jmp case.0x456701.1
cmp eax, 0xb017
jg 0x4567eb
je 0x456b0b
cmp eax, 0xb000
jg 0x4567d2
je 0x456ba4
sub eax, 0x112
je 0x45682d
add eax, 0xffffffe0
sub eax, 7
jb 0x4569cc
sub eax, 0x1e1
je 0x456cea
jmp case.0x456701.1
sub eax, 0xb001
je 0x456bcc
sub eax, 0x15
je 0x456ae9
jmp case.0x456701.1
cmp eax, 0xb020
jg 0x456811
je 0x456c4d
sub eax, 0xb01a
je 0x456bf4
sub eax, 5
je 0x456c33
jmp case.0x456701.1
sub eax, 0xb031
je 0x456c86
add eax, 0xfffffff2
sub eax, 2
jb 0x456ac8
jmp case.0x456701.1
mov eax, dword [ebp - 8]
mov eax, dword [eax + 4]
and eax, 0xfff0
sub eax, 0xf020
je 0x456848
sub eax, 0x100
je 0x456855
jmp 0x456862
mov eax, dword [ebp - 4]
call fcn.00456d84
jmp 0x456d14
mov eax, dword [ebp - 4]
call fcn.00456e34
jmp 0x456d14
push ebp
call fcn.004565dc
pop ecx
jmp 0x456d14
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x44]
test eax, eax
je 0x456d14
call fcn.00453d1c
jmp 0x456d14
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.00407724
test eax, eax
je 0x4568a2
push ebp
call fcn.00456618
pop ecx
jmp 0x456d14
push ebp
call fcn.004565dc
pop ecx
jmp 0x456d14
mov eax, dword [ebp - 8]
mov dword [eax], 0x27
push ebp
call fcn.004565dc
pop ecx
jmp 0x456d14
mov eax, dword [ebp - 4]
call fcn.00456d68
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
jmp 0x456d14
push 0
push 0
push 0xb01a
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.004077dc
push ebp
call fcn.004565dc
pop ecx
jmp 0x456d14
push ebp
call fcn.004565dc
pop ecx
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 1
sbb eax, eax
inc eax
mov edx, dword [ebp - 4]
mov byte [edx + 0x9d], al
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 0
je 0x45693c
mov eax, dword [ebp - 4]
call fcn.0045647c
push 0
push 0
push 0xb000
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.004077dc
jmp 0x456d14
mov eax, dword [ebp - 4]
call fcn.0045646c
push 0
push 0
push 0xb001
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.004077dc
jmp 0x456d14
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 0
je 0x456998
mov eax, dword [ebp - 4]
call fcn.0045647c
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xac]
test eax, eax
je 0x45698c
call fcn.0044e3e4
mov eax, dword [ebp - 4]
xor edx, edx
mov dword [eax + 0xac], edx
push ebp
call fcn.004565dc
pop ecx
jmp 0x456d14
push ebp
call fcn.004565dc
pop ecx
mov eax, dword [ebp - 4]
cmp dword [eax + 0xac], 0
jne 0x4569bf
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
call fcn.0044e330
mov edx, dword [ebp - 4]
mov dword [edx + 0xac], eax
mov eax, dword [ebp - 4]
call fcn.00456474
jmp 0x456d14
mov esi, dword [ebp - 8]
mov esi, dword [esi + 8]
push esi
mov eax, dword [ebp - 8]
mov eax, dword [eax + 4]
push eax
mov eax, dword [ebp - 8]
add ebx, 0xbc00
push ebx
mov eax, dword [ebp - 8]
push esi
call fcn.00407844
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
jmp 0x456d14
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 0
je 0x456d14
mov eax, dword [ebp - 4]
mov byte [eax + 0x9c], 1
jmp 0x456d14
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
cmp dword [eax], 0xde534454
jne 0x456d14
mov eax, dword [ebp - 4]
cmp byte [eax + 0x9e], 0
je 0x456d14
mov eax, dword [ebp - 4]
cmp dword [eax + 0xa0], 0
jne 0x456abb
mov edx, 0x8000
mov eax, 0x456d44
call fcn.0040e8e8
mov ebx, eax
mov eax, dword [ebp - 4]
mov dword [eax + 0xa0], ebx
test ebx, ebx
je 0x456aa0
mov eax, dword [ebp - 8]
xor edx, edx
mov dword [eax + 0xc], edx
push 0x456d54
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xa0]
push eax
call sub.user32.dll_GetMenuItemID
mov esi, eax
mov ebx, esi
test esi, esi
je 0x456d14
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
mov edx, dword [eax + 8]
push edx
mov edx, dword [ebp - 8]
mov eax, dword [eax + 4]
push eax
call ebx
jmp 0x456d14
call sub.user32.dll_GetKeyboardLayout
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
mov eax, dword [ebp - 4]
xor edx, edx
mov dword [eax + 0xa0], edx
jmp 0x456d14
mov eax, dword [ebp - 8]
xor edx, edx
mov dword [eax + 0xc], edx
jmp 0x456d14
mov ecx, dword [ebp - 8]
mov ecx, dword [ecx + 8]
mov eax, dword [ebp - 8]
mov edx, ebx
mov eax, dword [ebp - 4]
call fcn.004586c8
and eax, 0x7f
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
jmp 0x456d14
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.0045711c
test al, al
je 0x456d14
mov eax, dword [ebp - 8]
mov dword [eax + 0xc], 1
jmp 0x456d14
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x44]
test eax, eax
je 0x456d14
mov esi, eax
mov eax, esi
call fcn.0043e540
test eax, eax
je 0x456d14
mov eax, esi
call fcn.0043e540
push eax
call fcn.0040773c
test eax, eax
je 0x456d14
mov eax, esi
call fcn.0043e540
push eax
call fcn.00407744
test eax, eax
je 0x456d14
mov byte [0x4a7cd8], 0
call fcn.004075bc
mov ebx, eax
mov eax, esi
call fcn.0043e540
push eax
call fcn.0040787c
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
push eax
mov ecx, dword [ebp - 8]
mov ecx, dword [ecx + 4]
mov edx, 0x112
mov eax, esi
call fcn.00438f0c
push ebx
call fcn.0040787c
mov byte [0x4a7cd8], 1
mov eax, dword [ebp - 8]
mov dword [eax + 0xc], 1
jmp 0x456d14
mov eax, dword [ebp - 4]
cmp word [eax + 0x112], 0
je 0x456d14
mov ebx, dword [ebp - 4]
mov edx, dword [ebp - 4]
mov eax, dword [ebx + 0x114]
call dword [ebx + 0x110]
jmp 0x456d14
mov eax, dword [ebp - 4]
cmp word [eax + 0x10a], 0
je 0x456d14
mov ebx, dword [ebp - 4]
mov edx, dword [ebp - 4]
mov eax, dword [ebx + 0x10c]
call dword [ebx + 0x108]
jmp 0x456d14
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.00407724
test eax, eax
jne 0x456d14
call fcn.004075bc
mov edx, dword [ebp - 4]
cmp eax, dword [edx + 0x30]
jne 0x456d14
xor eax, eax
call fcn.0044e480
test eax, eax
je 0x456d14
push eax
call fcn.0040787c
jmp 0x456d14
mov ecx, dword [ebp - 8]
mov ecx, dword [ecx + 8]
mov edx, dword [ebp - 8]
mov dx, word [edx + 4]
mov eax, dword [ebp - 4]
call fcn.0045779c
jmp 0x456d14
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 0
jne 0x456c6e
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
push dword [eax + 4]
push dword [eax]
mov eax, dword [ebp - 4]
call fcn.0045725c
jmp 0x456d14
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
push dword [eax + 4]
push dword [eax]
mov eax, dword [ebp - 4]
call fcn.004572b8
jmp 0x456d14
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 1
jne 0x456ca0
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xb0]
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
jmp 0x456d14
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
mov edx, dword [ebp - 4]
mov dword [edx + 0xb0], eax
jmp 0x456d14
mov edx, dword [ebp - 8]
mov edx, dword [edx + 4]
mov eax, dword [0x4a9f5c]
mov eax, dword [eax]
call fcn.00442dc0
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.00456570
push ebp
call fcn.004565dc
pop ecx
jmp 0x456d14
mov eax, dword [0x4abbe4]
call fcn.00455b1c
push ebp
call fcn.004565dc
pop ecx
jmp 0x456d14
call fcn.0042f770
call fcn.0042f850
test al, al
je 0x456d14
call fcn.0042f770
call fcn.0042f8ac
jmp 0x456d14
xor eax, eax
call fcn.0041b948
jmp 0x456d14
push ebp
call fcn.004565dc
pop ecx
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x456d33
pop edi
pop esi
pop ebx
pop ecx
pop ecx
pop ebp
ret