Function at 0x456558
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 0x456c12
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 0x4565c0
inc ebx
xor esi, esi
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xa8]
mov edx, esi
call fcn.00415814
mov edi, eax
mov edx, dword [ebp - 8]
mov eax, dword [edi + 4]
call dword [edi]
test al, al
je 0x4565bc
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x456c27
inc esi
dec ebx
jne 0x456591
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.0045640c
mov ebx, dword [ebp - 8]
mov ebx, dword [ebx]
mov eax, ebx
cmp eax, 0x53
jg 0x456689
je 0x456b27
cmp eax, 0x16
jg 0x456650
je 0x4568ec
cmp eax, 0x14
ja case.0x4565f5.1
jmp dword [eax*4 + 0x4565fc]
cmp eax, 0x1d
jg 0x456672
je 0x456bcb
sub eax, 0x1a
je 0x456ba5
sub eax, 2
je 0x4567eb
jmp case.0x4565f5.1
sub eax, 0x37
je 0x4567b7
sub eax, 0x13
je 0x456908
jmp case.0x4565f5.1
cmp eax, 0xb017
jg 0x4566df
je 0x4569ff
cmp eax, 0xb000
jg 0x4566c6
je 0x456a98
sub eax, 0x112
je 0x456721
add eax, 0xffffffe0
sub eax, 7
jb 0x4568c0
sub eax, 0x1e1
je 0x456bde
jmp case.0x4565f5.1
sub eax, 0xb001
je 0x456ac0
sub eax, 0x15
je 0x4569dd
jmp case.0x4565f5.1
cmp eax, 0xb020
jg 0x456705
je 0x456b41
sub eax, 0xb01a
je 0x456ae8
sub eax, 5
je 0x456b27
jmp case.0x4565f5.1
sub eax, 0xb031
je 0x456b7a
add eax, 0xfffffff2
sub eax, 2
jb 0x4569bc
jmp case.0x4565f5.1
mov eax, dword [ebp - 8]
mov eax, dword [eax + 4]
and eax, 0xfff0
sub eax, 0xf020
je 0x45673c
sub eax, 0x100
je 0x456749
jmp 0x456756
mov eax, dword [ebp - 4]
call fcn.00456c78
jmp 0x456c08
mov eax, dword [ebp - 4]
call fcn.00456d28
jmp 0x456c08
push ebp
call fcn.004564d0
pop ecx
jmp 0x456c08
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x44]
test eax, eax
je 0x456c08
call fcn.00453c10
jmp 0x456c08
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.00407714
test eax, eax
je 0x456796
push ebp
call fcn.0045650c
pop ecx
jmp 0x456c08
push ebp
call fcn.004564d0
pop ecx
jmp 0x456c08
mov eax, dword [ebp - 8]
mov dword [eax], 0x27
push ebp
call fcn.004564d0
pop ecx
jmp 0x456c08
mov eax, dword [ebp - 4]
call fcn.00456c5c
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
jmp 0x456c08
push 0
push 0
push 0xb01a
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.004077cc
push ebp
call fcn.004564d0
pop ecx
jmp 0x456c08
push ebp
call fcn.004564d0
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 0x456830
mov eax, dword [ebp - 4]
call fcn.00456370
push 0
push 0
push 0xb000
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.004077cc
jmp 0x456c08
mov eax, dword [ebp - 4]
call fcn.00456360
push 0
push 0
push 0xb001
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.004077cc
jmp 0x456c08
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 0
je 0x45688c
mov eax, dword [ebp - 4]
call fcn.00456370
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xac]
test eax, eax
je 0x456880
call fcn.0044e2d8
mov eax, dword [ebp - 4]
xor edx, edx
mov dword [eax + 0xac], edx
push ebp
call fcn.004564d0
pop ecx
jmp 0x456c08
push ebp
call fcn.004564d0
pop ecx
mov eax, dword [ebp - 4]
cmp dword [eax + 0xac], 0
jne 0x4568b3
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
call fcn.0044e224
mov edx, dword [ebp - 4]
mov dword [edx + 0xac], eax
mov eax, dword [ebp - 4]
call fcn.00456368
jmp 0x456c08
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.00407834
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
jmp 0x456c08
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 0
je 0x456c08
mov eax, dword [ebp - 4]
mov byte [eax + 0x9c], 1
jmp 0x456c08
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
cmp dword [eax], 0xde534454
jne 0x456c08
mov eax, dword [ebp - 4]
cmp byte [eax + 0x9e], 0
je 0x456c08
mov eax, dword [ebp - 4]
cmp dword [eax + 0xa0], 0
jne 0x4569af
mov edx, 0x8000
mov eax, 0x456c38
call fcn.0040e890
mov ebx, eax
mov eax, dword [ebp - 4]
mov dword [eax + 0xa0], ebx
test ebx, ebx
je 0x456994
mov eax, dword [ebp - 8]
xor edx, edx
mov dword [eax + 0xc], edx
push 0x456c48
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xa0]
push eax
call fcn.00406f5c
mov esi, eax
mov ebx, esi
test esi, esi
je 0x456c08
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 0x456c08
call sub.user32.dll_GetKeyboardLayoutList
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
mov eax, dword [ebp - 4]
xor edx, edx
mov dword [eax + 0xa0], edx
jmp 0x456c08
mov eax, dword [ebp - 8]
xor edx, edx
mov dword [eax + 0xc], edx
jmp 0x456c08
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.004585bc
and eax, 0x7f
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
jmp 0x456c08
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.00457010
test al, al
je 0x456c08
mov eax, dword [ebp - 8]
mov dword [eax + 0xc], 1
jmp 0x456c08
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x44]
test eax, eax
je 0x456c08
mov esi, eax
mov eax, esi
call fcn.0043e434
test eax, eax
je 0x456c08
mov eax, esi
call fcn.0043e434
push eax
call fcn.0040772c
test eax, eax
je 0x456c08
mov eax, esi
call fcn.0043e434
push eax
call fcn.00407734
test eax, eax
je 0x456c08
mov byte [0x4a3cd8], 0
call fcn.004075ac
mov ebx, eax
mov eax, esi
call fcn.0043e434
push eax
call fcn.0040786c
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.00438e00
push ebx
call fcn.0040786c
mov byte [0x4a3cd8], 1
mov eax, dword [ebp - 8]
mov dword [eax + 0xc], 1
jmp 0x456c08
mov eax, dword [ebp - 4]
cmp word [eax + 0x112], 0
je 0x456c08
mov ebx, dword [ebp - 4]
mov edx, dword [ebp - 4]
mov eax, dword [ebx + 0x114]
call dword [ebx + 0x110]
jmp 0x456c08
mov eax, dword [ebp - 4]
cmp word [eax + 0x10a], 0
je 0x456c08
mov ebx, dword [ebp - 4]
mov edx, dword [ebp - 4]
mov eax, dword [ebx + 0x10c]
call dword [ebx + 0x108]
jmp 0x456c08
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x30]
push eax
call fcn.00407714
test eax, eax
jne 0x456c08
call fcn.004075ac
mov edx, dword [ebp - 4]
cmp eax, dword [edx + 0x30]
jne 0x456c08
xor eax, eax
call fcn.0044e374
test eax, eax
je 0x456c08
push eax
call fcn.0040786c
jmp 0x456c08
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.00457690
jmp 0x456c08
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 0
jne 0x456b62
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
push dword [eax + 4]
push dword [eax]
mov eax, dword [ebp - 4]
call fcn.00457150
jmp 0x456c08
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
push dword [eax + 4]
push dword [eax]
mov eax, dword [ebp - 4]
call fcn.004571ac
jmp 0x456c08
mov eax, dword [ebp - 8]
cmp dword [eax + 4], 1
jne 0x456b94
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xb0]
mov edx, dword [ebp - 8]
mov dword [edx + 0xc], eax
jmp 0x456c08
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
mov edx, dword [ebp - 4]
mov dword [edx + 0xb0], eax
jmp 0x456c08
mov edx, dword [ebp - 8]
mov edx, dword [edx + 4]
mov eax, dword [0x4a5b34]
mov eax, dword [eax]
call fcn.00442cb4
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.00456464
push ebp
call fcn.004564d0
pop ecx
jmp 0x456c08
mov eax, dword [0x4a6be4]
call fcn.00455a10
push ebp
call fcn.004564d0
pop ecx
jmp 0x456c08
call fcn.0042f664
call fcn.0042f744
test al, al
je 0x456c08
call fcn.0042f664
call fcn.0042f7a0
jmp 0x456c08
xor eax, eax
call fcn.0041b84c
jmp 0x456c08
push ebp
call fcn.004564d0
pop ecx
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x456c27
pop edi
pop esi
pop ebx
pop ecx
pop ecx
pop ebp
ret