Function at 0x41b8d0
Capabilities:
Check if file exists
Create thread

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x476cd1
mov eax, dword fs:[0]
push eax
sub esp, 0x90
mov eax, dword [0x4b34c4]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
xor ebx, ebx
mov dword [ebp - 0x9c], ebx
mov eax, dword [esi + 0x230]
cmp eax, ebx
je 0x41b93f
push eax
call dword [sym.imp.KERNEL32.dll_CloseHandle]
push ebx
push 0x485602
lea ecx, [esi + 0x274]
mov dword [esi + 0x230], ebx
call fcn.004059e0
push 0x40
lea eax, [esi + 0x234]
push ebx
push eax
call fcn.00427230
add esp, 0xc
xor al, al
mov ecx, esi
call fcn.0041a280
mov ecx, dword [esi + 0x5cc]
cmp ecx, ebx
je 0x41b985
call sym.PB20Configurator.exe_public:_bool___thiscall_DuiLib::CCheckBoxUI::GetCheck_void_const
test al, al
je 0x41b985
mov ecx, dword [esi + 0x5d0]
mov edx, dword [ecx]
mov edx, dword [edx + 0x28]
lea eax, [ebp - 0x54]
push eax
call edx
mov dword [ebp - 4], ebx
mov ebx, 1
mov ecx, eax
mov dword [ebp - 0x9c], ebx
call sym.PB20Configurator.exe_public:_char_const____thiscall_DuiLib::CDuiString::operator_char_const__void_const
mov edi, eax
jmp 0x41b98a
mov edi, 0x485602
mov ecx, edi
lea edx, [ecx + 1]
nop
mov al, byte [ecx]
inc ecx
test al, al
jne 0x41b990
sub ecx, edx
push ecx
push edi
lea ecx, [esi + 0x2c0]
call fcn.004059e0
mov dword [ebp - 4], 0xffffffff
test bl, 1
je 0x41b9c3
and ebx, 0xfffffffe
lea ecx, [ebp - 0x54]
mov dword [ebp - 0x9c], ebx
call sym.PB20Configurator.exe_public:_void___thiscall_DuiLib::CDuiString::destructor_void_
mov ecx, dword [esi + 0x5d8]
test ecx, ecx
je 0x41ba05
call sym.PB20Configurator.exe_public:_bool___thiscall_DuiLib::CCheckBoxUI::GetCheck_void_const
test al, al
je 0x41ba05
mov ecx, dword [esi + 0x5dc]
mov eax, dword [ecx]
mov eax, dword [eax + 0x28]
lea edx, [ebp - 0x98]
push edx
call eax
or ebx, 2
mov dword [ebp - 4], 1
mov ecx, eax
mov dword [ebp - 0x9c], ebx
call sym.PB20Configurator.exe_public:_char_const____thiscall_DuiLib::CDuiString::operator_char_const__void_const
mov edi, eax
jmp 0x41ba0a
mov edi, 0x485602
mov ecx, edi
lea edx, [ecx + 1]
nop
mov al, byte [ecx]
inc ecx
test al, al
jne 0x41ba10
sub ecx, edx
push ecx
push edi
lea ecx, [esi + 0x2dc]
call fcn.004059e0
mov dword [ebp - 4], 0xffffffff
test bl, 2
je 0x41ba3d
lea ecx, [ebp - 0x98]
call sym.PB20Configurator.exe_public:_void___thiscall_DuiLib::CDuiString::destructor_void_
mov eax, dword [esi + 0x2d0]
test eax, eax
jne 0x41ba62
cmp dword [esi + 0x2ec], eax
jne 0x41ba62
push str.Please_select_firmware_file_to_upgrade
push eax
call fcn.0041d4f0
add esp, 8
jmp 0x41bae6
mov ebx, dword [sym.imp.SHLWAPI.dll_PathFileExistsA]
mov edi, 0x10
test eax, eax
je 0x41ba9c
cmp dword [esi + 0x2d4], edi
lea eax, [esi + 0x2c0]
jb 0x41ba81
mov eax, dword [eax]
push eax
call ebx
test eax, eax
jne 0x41ba9c
push str.Keyboard_firmware_file_not_exist
push 0xffe03c3c
call fcn.0041d4f0
add esp, 8
jmp 0x41bae6
cmp dword [esi + 0x2ec], 0
je 0x41bad0
cmp dword [esi + 0x2f0], edi
lea eax, [esi + 0x2dc]
jb 0x41bab5
mov eax, dword [eax]
push eax
call ebx
test eax, eax
jne 0x41bad0
push str.Dongle_firmware_file_not_exist
push 0xffe03c3c
call fcn.0041d4f0
add esp, 8
jmp 0x41bae6
push 0
push 0
push esi
push 0x41bb10
push 0
push 0
call fcn.004233ab
add esp, 0x18
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.0042097b
mov esp, ebp
pop ebp
ret