Function at 0x48009640
Capabilities:
Query or enumerate registry key

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0xb4c
mov eax, dword [section..data]
xor eax, esp
mov dword [esp + 0xb48], eax
push ebx
push esi
push edi
push 0
call dword [sym.imp.HncIMM90.dll_HimStart]
mov esi, dword [sym.imp.HncAtlExt90.dll_public:_void___thiscall_CHncMenu::constructor_void_]
lea ecx, [esp + 0x7c]
mov dword [esp + 0x1c], eax
call esi
lea ecx, [esp + 0x34]
call esi
xor eax, eax
push 0x206
push eax
mov word [esp + 0x748], ax
lea eax, [esp + 0x74a]
push eax
call sub.MSVCR120.dll_memset
add esp, 0xc
xor eax, eax
mov word [esp + 0x128], ax
push 0x206
push eax
lea eax, [esp + 0x132]
push eax
call sub.MSVCR120.dll_memset
add esp, 0xc
xor eax, eax
mov word [esp + 0x948], ax
push 0x206
push eax
lea eax, [esp + 0x952]
push eax
call sub.MSVCR120.dll_memset
add esp, 0xc
xor eax, eax
mov word [esp + 0x330], ax
push 0x206
push eax
lea eax, [esp + 0x33a]
push eax
call sub.MSVCR120.dll_memset
add esp, 0xc
xor eax, eax
mov word [esp + 0x538], ax
push 0x206
push eax
lea eax, [esp + 0x542]
push eax
call sub.MSVCR120.dll_memset
mov ebx, dword [sym.imp.HncIMM90.dll_HimControl]
lea eax, [esp + 0x78]
add esp, 0xc
mov dword [esp + 0x2c], 1
mov dword [esp + 0x28], 0x104
mov dword [esp + 0x68], eax
mov dword [esp + 0x64], 0
push 0
push 0x120042
push 0x1408
push 0
call ebx
test eax, eax
jne 0x48009dca
lea eax, [esp + 0x74]
push eax
call dword [sym.imp.USER32.dll_GetCursorPos]
push 0x1a4
push dword [0x4801902c]
lea ecx, [esp + 0x84]
call dword [sym.imp.HncAtlExt90.dll_public:_int___thiscall_CHncMenu::LoadMenuW_struct_HINSTANCE_____unsigned_int_]
test eax, eax
je 0x48009dca
push 1
push dword [esp + 0x84]
call dword [sym.imp.HncAtlExt90.dll_public:_static_class_CHncMenuData____cdecl_CHncMenu::GetSubMenu_class_CHncMenuData___int_]
add esp, 8
lea ecx, [esp + 0x34]
push eax
call dword [sym.imp.HncAtlExt90.dll_public:_int___thiscall_CHncMenu::Attach_class_CHncMenuData__]
test eax, eax
je 0x48009dca
lea eax, [esp + 0xa0]
mov dword [esp + 0xa0], 0
push eax
push 0x120002
push 0x1408
push 0
call ebx
mov edi, dword [esp + 0xa4]
movzx eax, di
mov dword [esp + 0x20], eax
mov eax, edi
sar eax, 0x10
movzx eax, al
mov dword [esp + 0x58], eax
movzx eax, di
cmp eax, 0x411
jg 0x4800987c
je 0x48009868
cmp eax, 0x404
jg 0x4800984d
je 0x4800983a
test eax, eax
je 0x48009823
cmp eax, 0x400
jne 0x480098d2
mov ebx, 0x1f4
mov dword [esp + 0x10], 0x1ff
mov esi, 0xd2
jmp 0x480098e2
mov ebx, 0x1e0
mov dword [esp + 0x10], 0x1ef
mov esi, 0xbe
jmp 0x480098e2
mov ebx, 0x1dc
mov esi, 0xba
mov dword [esp + 0x10], ebx
jmp 0x480098e2
cmp eax, 0x409
jne 0x480098d2
mov ebx, 0x1ae
mov dword [esp + 0x10], 0x1af
mov esi, 0x96
jmp 0x480098e2
mov ebx, 0x1cc
mov dword [esp + 0x10], 0x1d0
mov esi, 0xaa
jmp 0x480098e2
cmp eax, 0x804
jg 0x480098b7
je 0x480098be
cmp eax, 0x412
je 0x480098a3
cmp eax, 0x800
jne 0x480098d2
mov ebx, 0x208
mov esi, 0xe6
mov dword [esp + 0x10], ebx
jmp 0x480098e2
mov ebx, 0x1b8
mov dword [esp + 0x10], 0x1c4
mov esi, 0x98
jmp 0x480098e2
cmp eax, 0x81e
jne 0x480098d2
mov ebx, 0x1d6
mov dword [esp + 0x10], 0x1d8
mov esi, 0xb4
jmp 0x480098e2
mov eax, dword [esp + 0x1c]
mov ebx, dword [esp + 0x1c]
mov esi, dword [esp + 0x1c]
mov dword [esp + 0x10], eax
mov eax, 0x800
mov dword [esp + 0xc], ebx
cmp di, ax
je 0x48009963
push 0
push 0
push 0xc00
push 0
push dword [esp + 0x48]
call dword [sym.imp.HncAtlExt90.dll_public:_static_int___cdecl_CHncMenu::InsertMenuW_class_CHncMenuData___unsigned_int__unsigned_int__unsigned_int__unsigned_short_int_const__]
mov edi, dword [esp + 0x24]
add esp, 0x14
sub edi, ebx
js 0x4800995c
add ebx, edi
sub esi, dword [esp + 0xc]
jmp 0x48009920
mov ecx, dword [0x4801902c]
lea eax, [esp + 0x740]
push 0x104
push eax
lea edx, [esi + ebx]
call fcn.4800e680
lea eax, [esp + 0x748]
push eax
push ebx
push 0x400
push 0
push dword [esp + 0x50]
call dword [sym.imp.HncAtlExt90.dll_public:_static_int___cdecl_CHncMenu::InsertMenuW_class_CHncMenuData___unsigned_int__unsigned_int__unsigned_int__unsigned_short_int_const__]
add esp, 0x1c
dec ebx
dec edi
jns 0x48009920
mov edi, dword [esp + 0xa4]
push ecx
lea eax, [esp + 0x18]
mov dword [esp + 0x18], 0
push eax
mov edx, str.View
mov ecx, str.SoftKeyboard
call fcn.4800e680
mov ebx, dword [sym.imp.HncAtlExt90.dll_public:_static_unsigned_int___cdecl_CHncMenu::CheckMenuItem_class_CHncMenuData___unsigned_int__unsigned_int_]
add esp, 8
cmp dword [esp + 0x14], 0
je 0x480099a0
push 8
push 0x218
push dword [esp + 0x40]
call ebx
add esp, 0xc
push ecx
lea eax, [esp + 0x18]
mov dword [esp + 0x18], 0
push eax
mov edx, str.View
mov ecx, str.Toolbar
call fcn.4800e680
add esp, 8
cmp dword [esp + 0x14], 0
je 0x480099d7
push 8
push 0x212
push dword [esp + 0x40]
call ebx
add esp, 0xc
mov esi, dword [sym.imp.HncAtlExt90.dll_public:_static_unsigned_int___cdecl_CHncMenu::EnableMenuItem_class_CHncMenuData___unsigned_int__unsigned_int_]
mov eax, 0x800
cmp di, ax
jne 0x480099f7
push 1
push 0x218
push dword [esp + 0x40]
call esi
add esp, 0xc
push 0
push 0x1d0040
push 0x1408
push 0
call dword [sym.imp.HncIMM90.dll_HimControl]
test eax, eax
jne 0x48009a1f
push 1
push 0x218
push dword [esp + 0x40]
call esi
add esp, 0xc
cmp dword [ebp + 8], 0x216
mov ebx, dword [esp + 0xc]
jne 0x48009a6d
mov esi, dword [esp + 0x10]
push dword [esp + 0x38]
mov edi, dword [sym.imp.HncAtlExt90.dll_public:_static_unsigned_int___cdecl_CHncMenu::GetMenuItemCount_class_CHncMenuData__]
sub esi, ebx
inc esi
call edi
add esp, 4
cmp eax, esi
jle 0x48009a66
push 0x400
push esi
push dword [esp + 0x40]
call dword [sym.imp.HncAtlExt90.dll_public:_static_int___cdecl_CHncMenu::DeleteMenu_class_CHncMenuData___unsigned_int__unsigned_int_]
add esp, 0xc
push dword [esp + 0x38]
call edi
add esp, 4
cmp eax, esi
jg 0x48009a46
mov edi, dword [esp + 0xa4]
mov ecx, str.UserKeyboard
xor esi, esi
call fcn.4800e680
mov dword [esp + 0x24], eax
mov ecx, 0x81e
test eax, eax
je 0x48009c4b
mov edx, 0x804
mov dword [esp + 0x30], 0xffef
cmp di, dx
je 0x48009aa1
cmp di, cx
jne 0x48009aa9
mov dword [esp + 0x20], edx
mov dword [esp + 0x30], ecx
push 0x104
lea ecx, [esp + 0x12c]
push ecx
push 0
push eax
call dword [sym.imp.ADVAPI32.dll_RegEnumKeyW]
test eax, eax
jne 0x48009c4b
mov ecx, dword [esp + 0x10]
sub ecx, ebx
inc ecx
xor ebx, ebx
mov dword [esp + 0x18], ecx
mov dword [esp + 0x14], ecx
jmp 0x48009ae0
inc esi
cmp word [esp + 0x128], 0x7b
mov dword [esp + 0x5c], esi
jne 0x48009b35
cmp word [esp + 0x132], 0x2d
jne 0x48009b35
cmp word [esp + 0x13c], 0x7d
jne 0x48009b35
lea ecx, [esp + 0x12a]
call fcn.4800d2c0
lea ecx, [esp + 0x134]
movzx esi, ax
call fcn.4800d2c0
mov ecx, dword [esp + 0x18]
movzx edi, ax
mov eax, esi
mov esi, dword [esp + 0x5c]
shl eax, 0x10
or edi, eax
jmp 0x48009b38
or edi, 0xffffffff
cmp word [esp + 0x20], di
je 0x48009b4a
cmp word [esp + 0x30], di
jne 0x48009bed
cmp dword [esp + 0x2c], 0
je 0x48009b79
cmp dword [ebp + 8], 0x216
jne 0x48009b79
push 0
push 0
push 0xc00
push ecx
push dword [esp + 0x48]
mov dword [esp + 0x40], 0
call dword [sym.imp.HncAtlExt90.dll_public:_static_int___cdecl_CHncMenu::InsertMenuW_class_CHncMenuData___unsigned_int__unsigned_int__unsigned_int__unsigned_short_int_const__]
add esp, 0x14
inc dword [esp + 0x14]
lea eax, [esp + 0x128]
push eax
push str.UserKeyboard
lea eax, [esp + 0x338]
inc ebx
push str._s_s
push eax
call fcn.4800e680
lea eax, [esp + 0x38]
push eax
lea eax, [esp + 0x54c]
push eax
lea ecx, [esp + 0x348]
call fcn.4800e680
add esp, 0x18
test eax, eax
je 0x48009bed
shr edi, 0x10
lea eax, [esp + 0x538]
push eax
mov eax, dword [esp + 0x18]
shr edi, 8
add edi, 0x320
push edi
mov edi, dword [sym.imp.HncAtlExt90.dll_public:_static_int___cdecl_CHncMenu::InsertMenuW_class_CHncMenuData___unsigned_int__unsigned_int__unsigned_int__unsigned_short_int_const__]
push 0x400
push eax
push dword [esp + 0x48]
call edi
add esp, 0x14
jmp 0x48009bf3
mov edi, dword [sym.imp.HncAtlExt90.dll_public:_static_int___cdecl_CHncMenu::InsertMenuW_class_CHncMenuData___unsigned_int__unsigned_int__unsigned_int__unsigned_short_int_const__]
push 0x104
lea eax, [esp + 0x12c]
push eax
push esi
push dword [esp + 0x30]
call dword [sym.imp.ADVAPI32.dll_RegEnumKeyW]
mov ecx, dword [esp + 0x18]
test eax, eax
je 0x48009ae0
mov dword [esp + 0x18], ebx
test ebx, ebx
mov ebx, dword [esp + 0xc]
jle 0x48009c4b
cmp dword [ebp + 8], 1
jne 0x48009c4b
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + 0x10]
sub ecx, ebx
push 0
push 0
add eax, 2
push 0xc00
add eax, ecx
push eax
push dword [esp + 0x48]
call edi
add esp, 0x14
mov eax, dword [esp + 0x20]
mov esi, 0x81e
cmp ax, si
mov ecx, 0x804
cmove eax, ecx
movzx eax, ax
push eax
push str.LangEnv
lea eax, [esp + 0x950]
push str._s0000__04x
push eax
call fcn.4800e680
add esp, 0x10
mov dword [esp + 0x24], 4
lea ecx, [esp + 0x948]
mov dword [esp + 0x28], 4
call fcn.4800e680
mov edi, eax
test edi, edi
je 0x48009cfa
push 0
lea eax, [esp + 0x28]
push eax
lea eax, [esp + 0x68]
push eax
lea eax, [esp + 0x34]
push eax
push 0
push str.Keyboard
push edi
call dword [sym.imp.HncBL90.dll_HncRegQueryValueEx]
push 0
push edi
mov esi, eax
call dword [sym.imp.HncBL90.dll_HncRegCloseKey]
xor ecx, ecx
test esi, esi
sete cl
test ecx, ecx
je 0x48009cfa
mov ecx, dword [esp + 0x60]
mov al, cl
mov esi, dword [sym.imp.HncAtlExt90.dll_public:_static_unsigned_int___cdecl_CHncMenu::CheckMenuItem_class_CHncMenuData___unsigned_int__unsigned_int_]
and al, 0xf0
push 8
cmp al, 0x10
jne 0x48009cf5
shr ecx, 8
movzx eax, cl
add eax, 0x320
jmp 0x48009d0e
lea eax, [ecx + ebx]
jmp 0x48009d0e
mov eax, dword [esp + 0x58]
mov esi, dword [sym.imp.HncAtlExt90.dll_public:_static_unsigned_int___cdecl_CHncMenu::CheckMenuItem_class_CHncMenuData___unsigned_int__unsigned_int_]
movzx eax, al
and eax, 0xf
push 8
add eax, ebx
push eax
push dword [esp + 0x40]
call esi
add esp, 0xc
cmp eax, 0xffffffff
jne 0x48009d29
push 8
push ebx
push dword [esp + 0x40]
call esi
add esp, 0xc
call dword [sym.imp.USER32.dll_GetFocus]
mov edi, dword [esp + 0x1c]
mov esi, eax
push edi
call dword [sym.imp.USER32.dll_SetForegroundWindow]
mov ebx, dword [ebp + 8]
cmp ebx, 0x216
jne 0x48009d5b
mov ecx, dword [0x4801a4c0]
test ecx, ecx
je 0x48009d5b
mov dword [ecx + 0xb0], 1
push 0
push edi
push dword [esp + 0x80]
lea ecx, [esp + 0x40]
push dword [esp + 0x80]
push 0x10
call dword [sym.imp.HncAtlExt90.dll_public:_unsigned_int___thiscall_CHncMenu::TrackPopupMenu_unsigned_int__int__int__struct_HWND_____struct_tagRECT_const__]
cmp ebx, 0x216
jne 0x48009db6
mov ecx, dword [0x4801a4c0]
test ecx, ecx
je 0x48009db6
mov eax, dword [ecx + 0x30]
push 0
mov dword [ecx + 0xb0], 0
mov dword [ecx + 0x28], eax
mov dword [ecx + eax*4 + 0x60], 0
push 0
push dword [ecx + 4]
mov dword [ecx + 0x30], 0xffffffff
call dword [sym.imp.USER32.dll_InvalidateRect]
push 0
push 0
push 0
push edi
call dword [sym.imp.USER32.dll_PostMessageW]
push esi
call dword [sym.imp.USER32.dll_SetFocus]
mov ecx, dword [esp + 0x64]
xor esi, esi
mov edi, dword [sym.imp.MSVCR120.dll_free]
test ecx, ecx
jle 0x48009e05
lea ebx, [ebx]
mov eax, dword [esp + 0x68]
mov eax, dword [eax + esi*4]
test eax, eax
je 0x48009e00
sub eax, 8
cmp dword [eax], 0xdddd
jne 0x48009e00
push eax
call edi
mov ecx, dword [esp + 0x68]
add esp, 4
inc esi
cmp esi, ecx
jl 0x48009de0
cmp ecx, 2
jle 0x48009e13
push dword [esp + 0x68]
call edi
add esp, 4
mov esi, dword [sym.imp.HncAtlExt90.dll_public_virtual:_void___thiscall_CHncMenu::destructor_void_]
lea ecx, [esp + 0x34]
call esi
lea ecx, [esp + 0x7c]
call esi
mov ecx, dword [esp + 0xb54]
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.4800ff6a
mov esp, ebp
pop ebp
ret