Function at 0x10003a40
Capabilities:
Check mutex on windows

Disassembly:
test eax, eax
je 0x10003d8f
push edi
lea edi, [esp + 8]
and esp, 0xfffffff8
push dword [edi - 4]
push ebp
mov ebp, esp
push edi
push esi
mov esi, eax
push ebx
mov ebx, eax
add esp, 0xffffff80
jmp 0x10003a73
mov ebx, dword [ebx + 4]
test ebx, ebx
je 0x10003ce8
cmp dword [ebx], 0x32
jne 0x10003a68
mov eax, ebx
mov ecx, esi
jmp 0x10003a8b
mov ecx, dword [ecx + 4]
test ecx, ecx
je 0x10003cd0
cmp dword [ecx], 0x3b9bdf5c
jne 0x10003a80
mov eax, dword [section..bss]
test eax, eax
je 0x10003d50
mov dword [ebp - 0x4c], ecx
lea edi, [ebp - 0x3c]
mov dword [esp + 8], str.display_device_init
mov dword [esp + 4], 0
mov dword [esp], 0
call dword [sym.imp.kernel32.dll_CreateMutexW]
sub esp, 0xc
mov dword [ebp - 0x58], eax
mov dword [esp + 4], 0xffffffff
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_WaitForSingleObject]
sub esp, 8
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], 0x100181f4
mov dword [esp], 0x10018ad8
call dword [sym.imp.setupapi.dll_SetupDiGetClassDevsW]
mov ecx, dword [ebp - 0x4c]
mov dword [ebp - 0x5c], ebx
mov dword [ebp - 0x54], eax
sub esp, 0x10
lea eax, [ebx + 8]
mov ebx, dword [ebp - 0x54]
test ecx, ecx
lea edx, [ecx + 8]
mov dword [ebp - 0x2c], 0x1c
cmovne eax, edx
mov dword [ebp - 0x60], ecx
mov dword [ebp - 0x64], esi
mov dword [ebp - 0x50], eax
xor eax, eax
jmp 0x10003b33
mov eax, dword [ebp - 0x4c]
lea edx, [eax + 1]
mov dword [ebp - 0x4c], edx
lea edx, [ebp - 0x2c]
mov dword [esp + 8], edx
mov dword [esp + 4], eax
mov dword [esp], ebx
call dword [sym.imp.setupapi.dll_SetupDiEnumDeviceInfo]
sub esp, 0xc
test eax, eax
je 0x10003cf0
lea eax, [ebp - 0x2c]
lea esi, [ebp - 0x48]
mov dword [esp + 0x1c], 0
mov dword [esp + 0x18], 0
mov dword [esp + 0x14], 0x10
mov dword [esp + 0x10], edi
mov dword [esp + 0xc], esi
mov dword [esp + 8], 0x1002171c
mov dword [esp + 4], eax
mov dword [esp], ebx
call dword [sym.imp.setupapi.dll_SetupDiGetDevicePropertyW]
sub esp, 0x20
test eax, eax
je 0x10003b30
mov edx, dword [ebp - 0x50]
mov eax, dword [edi]
mov ecx, dword [edi + 4]
xor eax, dword [edx]
xor ecx, dword [edx + 4]
or eax, ecx
jne 0x10003b30
mov eax, dword [edi + 8]
mov ecx, dword [edi + 0xc]
xor eax, dword [edx + 8]
xor ecx, dword [edx + 0xc]
or eax, ecx
jne 0x10003b30
lea eax, [ebp - 0x44]
mov dword [esp + 0x1c], 0
mov dword [esp + 0x10], eax
lea eax, [ebp - 0x2c]
mov dword [esp + 0x18], 0
mov dword [esp + 0x14], 8
mov dword [esp + 0xc], esi
mov dword [esp + 8], 0x10021708
mov dword [esp + 4], eax
mov dword [esp], ebx
call dword [sym.imp.setupapi.dll_SetupDiGetDevicePropertyW]
sub esp, 0x20
test eax, eax
je 0x10003b30
mov ecx, dword [ebp - 0x60]
mov eax, dword [ebp - 0x54]
mov ebx, dword [ebp - 0x5c]
mov esi, dword [ebp - 0x64]
mov dword [ebp - 0x4c], ecx
mov dword [esp], eax
call dword [sym.imp.setupapi.dll_SetupDiDestroyDeviceInfoList]
mov edi, dword [ebp - 0x58]
sub esp, 4
mov dword [esp], edi
call dword [sym.imp.kernel32.dll_ReleaseMutex]
sub esp, 4
mov dword [esp], edi
call dword [sym.imp.kernel32.dll_CloseHandle]
mov ecx, dword [ebp - 0x4c]
sub esp, 4
test ecx, ecx
je 0x10003d9a
mov eax, dword [ebp - 0x44]
mov edx, dword [ebp - 0x40]
movq xmm0, qword [0x10018bd0]
mov dword [ecx + 0x28], eax
mov dword [ecx + 0x2c], edx
movq qword [ecx + 0x30], xmm0
test ebx, ebx
je 0x10003d90
mov dword [ebx + 0x28], eax
mov ecx, 1
mov dword [ebx + 0x2c], edx
movq qword [ebx + 0x30], xmm0
test byte [0x10016018], 8
je 0x10003cd8
mov dword [esp + 0x20], ecx
mov eax, dword [ebp - 0x44]
mov dword [esp + 0x1c], eax
mov eax, dword [ebp - 0x40]
mov dword [esp + 0x14], ecx
mov dword [esp + 0x18], eax
lea eax, [esi + 0x1c]
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.deviceName:_s_deviceLUIDValid:_d_LUID:_08lx:_08lx_deviceNodeMask:_x._n
mov dword [esp + 8], str.fill_luid_property
mov dword [esp + 4], 0x10016018
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
lea esp, [edi - 8]
pop edi
ret
test eax, eax
jne 0x10003a93
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
lea esp, [edi - 8]
pop edi
ret
xor eax, eax
jmp 0x10003a7a
mov ecx, dword [ebp - 0x60]
mov eax, dword [ebp - 0x54]
mov ebx, dword [ebp - 0x5c]
mov esi, dword [ebp - 0x64]
mov dword [ebp - 0x4c], ecx
mov dword [esp], eax
call dword [sym.imp.setupapi.dll_SetupDiDestroyDeviceInfoList]
mov edi, dword [ebp - 0x58]
sub esp, 4
mov dword [esp], edi
call dword [sym.imp.kernel32.dll_ReleaseMutex]
sub esp, 4
mov dword [esp], edi
call dword [sym.imp.kernel32.dll_CloseHandle]
mov ecx, dword [ebp - 0x4c]
sub esp, 4
test ecx, ecx
je 0x10003d3b
mov dword [ecx + 0x30], 0
mov dword [ecx + 0x34], 0
xor ecx, ecx
test ebx, ebx
je 0x10003c77
pxor xmm0, xmm0
xor ecx, ecx
jmp 0x10003c72
mov dword [ebp - 0x4c], ecx
call dword [sym.imp.user32.dll_GetDesktopWindow]
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], eax
call dword [sym.imp.user32.dll_SendMessageW]
mov ecx, dword [ebp - 0x4c]
mov dword [section..bss], 1
sub esp, 0x10
jmp 0x10003aa0
ret
mov ecx, 1
jmp 0x10003c77
test ebx, ebx
je 0x10003d90
mov eax, dword [ebp - 0x44]
mov edx, dword [ebp - 0x40]
movq xmm0, qword [0x10018bd0]
jmp 0x10003c67