Function at 0x401db0
Capabilities:
Check mutex on windows
Create thread

Disassembly:
sub esp, 8
push esi
push edi
call fcn.00401c60
test al, al
jne 0x401dd3
push str.The_DevManager_is_running......._n
call fcn.00406d51
add esp, 4
xor eax, eax
pop edi
pop esi
add esp, 8
ret
mov eax, dword [str.GlobalDevInitFlag]
push eax
push 1
push 0
call dword [sym.imp.KERNEL32.dll_CreateMutexA]
test eax, eax
mov dword [0x425f84], eax
je 0x402181
cmp eax, 0xffffffff
je 0x402181
mov eax, 0x428e99
mov dword [eax], 0
add eax, 0x2d
cmp eax, 0x42b1c1
jl 0x401dfe
call fcn.00401000
test eax, eax
jge 0x401e2c
push str.DevManager_initialize_failed_n
call fcn.00406d51
add esp, 4
xor eax, eax
pop edi
pop esi
add esp, 8
ret
jle 0x402176
push 0
push 0x40
push str.Device_Driver_Install_Finished__n
mov byte [0x42b23c], 1
call fcn.004166a5
push str.DevManager_initialize_succeed__n
call fcn.00406d51
call fcn.00401ca0
push str.DevInstalled_in_system_n
call fcn.00406d51
push str.index_tvendorID_tproductID_tchannel_n
call fcn.00406d51
mov eax, dword [0x42b240]
add esp, 0xc
xor edi, edi
test eax, eax
jle 0x401ea9
mov esi, 0x428e74
mov ecx, dword [esi + 0x25]
xor edx, edx
mov dx, word [esi]
xor eax, eax
mov ax, word [esi + 2]
push ecx
push edx
push eax
push edi
push str._d:_______.4x_t_t___.4x_t_t___d_n
call fcn.00406d51
mov eax, dword [0x42b240]
add esp, 0x14
inc edi
add esi, 0x2d
cmp edi, eax
jl 0x401e7d
push 0x421478
push 0
push 0
push 0x403780
push 0
push 0
call dword [sym.imp.KERNEL32.dll_CreateThread]
test eax, eax
mov dword [0x42b2b0], eax
jne 0x401edf
push str.CreateThread_failed
call fcn.00406d51
add esp, 4
xor eax, eax
pop edi
pop esi
add esp, 8
ret
mov al, byte [0x41e110]
test al, al
je 0x402127
push ebx
push ebp
mov edx, dword [0x42b1f8]
mov ecx, dword [0x42b19c]
mov esi, dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
push 0xffffffffffffffff
push edx
mov dword [0x42b1a0], ecx
call esi
mov eax, dword [0x42b1f0]
push 0xffffffffffffffff
push eax
call esi
test eax, eax
jne 0x4020f0
mov ecx, dword [0x42b198]
xor ebx, ebx
xor esi, esi
xor edi, edi
mov eax, dword [ecx]
mov edx, dword [ecx + 0x3e]
mov si, word [ecx + 4]
mov di, word [ecx + 6]
mov ebp, dword [ecx + 0x3a]
sub eax, ebx
mov dword [esp + 0x14], edx
je 0x402063
dec eax
jne 0x4020f0
mov edx, dword [0x42b240]
mov dword [esp + 0x10], ebx
cmp edx, ebx
jle 0x402047
mov eax, dword [0x42b1a0]
xor ebx, ebx
mov bx, word [eax]
cmp esi, ebx
jne 0x401f7b
xor ebx, ebx
mov bx, word [eax + 2]
cmp edi, ebx
jne 0x401f7b
cmp ebp, dword [eax + 0x3c]
je 0x401f95
mov ebx, dword [esp + 0x10]
add eax, 0x40
inc ebx
mov dword [0x42b1a0], eax
cmp ebx, edx
mov dword [esp + 0x10], ebx
jl 0x401f63
jmp 0x402047
mov cl, byte [eax + 0x36]
test cl, cl
je 0x401fe6
mov eax, dword [eax + 0x37]
push eax
push 0
push 0x1f0fff
call dword [sym.imp.KERNEL32.dll_OpenProcess]
test eax, eax
jne 0x401fbd
mov ecx, dword [0x42b1a0]
mov byte [ecx + 0x36], 1
jmp 0x401fea
mov edx, dword [0x42b1a0]
mov eax, dword [edx + 0x37]
push eax
push ebp
push edi
push esi
push str._x:_x:_d_device_is_inuse_by__d__n
call fcn.00406d51
mov ecx, dword [0x42b198]
add esp, 0x14
mov dword [ecx + 0x42], 0xfffffffd
jmp 0x402030
mov byte [eax + 0x36], 1
mov edx, dword [0x42b1a0]
mov word [edx], si
mov eax, dword [0x42b1a0]
mov word [eax + 2], di
mov ecx, dword [0x42b1a0]
mov eax, dword [esp + 0x14]
mov dword [ecx + 0x3c], ebp
mov edx, dword [0x42b1a0]
push eax
push ebp
mov dword [edx + 0x37], eax
mov ecx, dword [0x42b198]
push edi
push esi
push str._x:_x:_d_device_is_got_by__d_n
mov dword [ecx + 0x42], 1
call fcn.00406d51
add esp, 0x14
mov edx, dword [esp + 0x10]
mov eax, dword [0x42b240]
cmp edx, eax
jl 0x4020f0
mov ecx, dword [0x42b198]
push ebp
push edi
push esi
push str._x:_x:_d_device_not_exist_n
mov dword [ecx + 0x42], 0xffffffff
call fcn.00406d51
add esp, 0x10
jmp 0x4020f0
mov ecx, dword [0x42b240]
test ecx, ecx
jle 0x4020d4
mov eax, dword [0x42b1a0]
xor edx, edx
mov dx, word [eax]
cmp esi, edx
jne 0x40209a
xor edx, edx
mov dx, word [eax + 2]
cmp edi, edx
jne 0x40209a
cmp ebp, dword [eax + 0x3c]
jne 0x40209a
mov dl, byte [eax + 0x36]
test dl, dl
je 0x40209a
mov edx, dword [esp + 0x14]
cmp dword [eax + 0x37], edx
je 0x4020a9
add eax, 0x40
inc ebx
cmp ebx, ecx
mov dword [0x42b1a0], eax
jl 0x402072
jmp 0x4020d4
push edx
mov byte [eax + 0x36], 0
mov eax, dword [0x42b198]
push ebp
push edi
push esi
push str._x:_x:_d_device_is_released_by__d_n
mov dword [eax + 0x42], 1
call fcn.00406d51
mov ecx, dword [0x42b240]
add esp, 0x14
cmp ebx, ecx
jl 0x4020f0
push ebx
push ecx
push str.sys_devcount_d_i_d_n
call fcn.00406d51
mov ecx, dword [0x42b198]
add esp, 0xc
mov dword [ecx + 0x42], 0xffffffff
mov edx, dword [0x42b1f0]
push edx
call dword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov eax, dword [0x42b1f4]
push eax
call dword [sym.imp.KERNEL32.dll_SetEvent]
mov ecx, dword [0x42b238]
push 0x14
push ecx
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
mov al, byte [0x41e110]
test al, al
jne 0x401eee
pop ebp
pop ebx
mov edx, dword [0x42b19c]
push edx
call fcn.00406f1e
mov eax, dword [0x42b198]
mov esi, dword [sym.imp.KERNEL32.dll_UnmapViewOfFile]
add esp, 4
push eax
call esi
mov ecx, dword [0x425f80]
push ecx
call esi
mov edx, dword [0x423c4c]
push edx
call esi
mov eax, dword [0x423c44]
mov esi, dword [sym.imp.KERNEL32.dll_CloseHandle]
push eax
call esi
mov ecx, dword [0x425f88]
push ecx
call esi
mov edx, dword [0x42b1e8]
push edx
call esi
pop edi
mov eax, 1
pop esi
add esp, 8
ret
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.Could_not_create_hShMMutex_object___d_._n
call fcn.00406d51
add esp, 8
or eax, 0xffffffff
pop edi
pop esi
add esp, 8
ret