Function at 0x6e903460
Capabilities:
Read file on windows

Disassembly:
lea ecx, [esp + 4]
and esp, 0xfffffff0
xor edx, edx
xor eax, eax
push dword [ecx - 4]
push ebp
mov ebp, esp
push edi
push esi
push ebx
push ecx
sub esp, 0x118
mov dword [ebp + eax - 0x60], edx
add eax, 4
cmp eax, 0x18
jb 0x6e90347b
xor eax, eax
lea edi, [ebp - 0x44]
mov ecx, 0xb
mov word [ebp - 0x58], 0x6480
rep stosd dword es:[edi], eax
mov eax, dword [0x6e90c018]
mov dword [ebp - 0x68], 0x20
mov dword [ebp - 0x64], 5
mov dword [ebp - 0x5c], 0x6c53d5fd
mov word [ebp - 0x56], 0x440f
mov dword [ebp - 0x54], 0x674718b6
mov dword [ebp - 0x50], 0xa6e1c550
mov dword [ebp - 0x48], 0x30
mov dword [ebp - 0x40], sym._xinput_devnotify_wndproc_16
mov dword [ebp - 0x34], eax
mov dword [ebp - 0x20], str.__wine_xinput_devnotify
mov dword [esp + 4], str.wine_xinput_hid_update
mov dword [esp], 0xfffffffe
call dword [sym.imp.kernel32.dll_SetThreadDescription]
lea eax, [ebp - 0x48]
push ebx
push ebx
mov ebx, 0x102
mov dword [esp], eax
call dword [sym.imp.user32.dll_RegisterClassExW]
mov eax, dword [ebp - 0x20]
push esi
mov dword [esp + 0x2c], 0
mov dword [esp + 0x28], 0
mov dword [esp + 0x24], 0
mov dword [esp + 0x20], 0xfffffffd
mov dword [esp + 0x1c], 0
mov dword [esp + 0x18], 0
mov dword [esp + 0x14], 0
mov dword [esp + 0x10], 0
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], eax
mov dword [esp], 0
call dword [sym.imp.user32.dll_CreateWindowExW]
mov ecx, eax
sub esp, 0x30
mov dword [ebp - 0xe4], eax
lea eax, [ebp - 0x68]
mov dword [esp], ecx
mov dword [esp + 8], 0
mov dword [esp + 4], eax
call dword [sym.imp.user32.dll_RegisterDeviceNotificationW]
sub esp, 0xc
mov dword [ebp - 0xe8], eax
call sym._update_controller_list
mov eax, dword [0x6e90c014]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_SetEvent]
push edi
mov edi, 1
lea esi, [esi]
cmp ebx, 0x102
je 0x6e903680
dec edi
cmp edi, ebx
ja 0x6e903693
mov edi, dword [sym.imp.kernel32.dll_EnterCriticalSection]
mov esi, 0x6e9060a0
xor ebx, ebx
mov edx, dword [esi + 0x4c]
test edx, edx
je 0x6e903614
mov dword [esp], esi
call edi
mov eax, dword [esi + 0x258]
sub esp, 4
test eax, eax
je 0x6e903608
mov eax, dword [esi + 0x450]
mov dword [ebp + ebx*4 - 0xc4], esi
mov dword [ebp + ebx*4 - 0xb0], eax
inc ebx
mov dword [esp], esi
call dword [sym.imp.kernel32.dll_LeaveCriticalSection]
sub esp, 4
add esi, 0x508
cmp esi, 0x6e9074c0
jne 0x6e9035da
mov eax, dword [0x6e90c010]
lea edi, [ebx + 1]
mov dword [esp + 0x10], 2
mov dword [esp + 0xc], 0x1cff
mov dword [ebp + ebx*4 - 0xb0], eax
lea eax, [ebp - 0xb0]
mov dword [esp + 8], 0x7d0
mov dword [esp + 4], eax
mov dword [esp], edi
call dword [sym.imp.user32.dll_MsgWaitForMultipleObjectsEx]
sub esp, 0x14
mov ebx, eax
cmp edi, eax
jae 0x6e903750
cmp eax, 0x102
jne 0x6e903be0
cmp edi, 0x102
je 0x6e903756
call sym._update_controller_list
mov ebx, 0x102
dec edi
cmp edi, ebx
jbe 0x6e9035cd
mov ebx, dword [ebp + ebx*4 - 0xc4]
lea eax, [ebx + 0x454]
movzx edi, word [ebx + 0x264]
mov esi, dword [ebx + 0x468]
mov dword [esp + 0xc], 1
mov ecx, eax
mov dword [ebp - 0xe0], eax
lea eax, [ebp - 0xd0]
mov dword [esp + 8], eax
mov dword [esp + 4], ecx
mov eax, dword [ebx + 0x4c]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_GetOverlappedResult]
sub esp, 0x10
test eax, eax
jne 0x6e9037b8
mov eax, dword fs:[0x18]
cmp dword [eax + 0x34], 0x3e3
je 0x6e9035cd
cmp dword [eax + 0x34], 5
je 0x6e903bd0
cmp dword [eax + 0x34], 6
je 0x6e903bd0
test byte [0x6e9074c0], 2
je 0x6e9035cd
mov eax, dword [eax + 0x34]
mov dword [esp + 0xc], str.Failed_to_read_input_report__GetOverlappedResult_failed_with_error__lu_n
mov dword [esp + 8], str.read_controller_state
mov dword [esp + 0x10], eax
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 1
call sym._wine_dbg_log.constprop.0
jmp 0x6e9035cd
jne 0x6e9035b8
mov dword [ebp - 0xdc], edi
mov esi, dword [sym.imp.user32.dll_PeekMessageW]
lea ebx, [ebp - 0x84]
mov edi, dword [ebp - 0xe4]
jmp 0x6e90377c
mov dword [esp], ebx
call dword [sym.imp.user32.dll_DispatchMessageW]
sub esp, 4
mov dword [esp + 0x10], 1
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], edi
mov dword [esp], ebx
call esi
sub esp, 0x14
test eax, eax
jne 0x6e903770
mov edi, dword [ebp - 0xdc]
mov ebx, edi
jmp 0x6e9035b8
movzx eax, di
mov dword [esp + 0x18], esi
lea edi, [ebp - 0x9a]
mov dword [ebp - 0xdc], eax
mov dword [esp + 0x1c], eax
mov eax, dword [ebx + 0x25c]
mov dword [esp + 0xc], edi
mov dword [esp + 0x14], eax
lea eax, [ebp - 0xcc]
mov dword [esp + 0x10], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 9
mov dword [esp], 0
mov dword [ebp - 0xcc], 0xb
call sym._HidP_GetUsages_32
sub esp, 0x20
cmp eax, 0x110000
je 0x6e903824
test byte [0x6e9074c0], 4
jne 0x6e903e48
mov edx, dword [ebp - 0xcc]
test edx, edx
je 0x6e903fa1
mov eax, edi
lea ecx, [edi + edx*2]
xor edi, edi
lea esi, [esi]
cmp word [eax], 0xb
ja case.0x6e903849.0
movzx edx, word [eax]
jmp dword [edx*4 + 0x6e909aa8]
or di, 0x400
lea esi, [esi]
add eax, 2
cmp ecx, eax
jne 0x6e903840
mov eax, dword [ebp - 0xdc]
mov dword [esp + 0x18], esi
mov dword [esp + 0x1c], eax
mov eax, dword [ebx + 0x25c]
mov dword [esp + 0xc], 0x39
mov dword [esp + 0x14], eax
lea eax, [ebp - 0xc8]
mov dword [esp + 0x10], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 1
mov dword [esp], 0
call sym._HidP_GetUsageValue_32
sub esp, 0x20
cmp eax, 0x110000
je 0x6e903c3b
test byte [0x6e9074c0], 4
jne 0x6e903e1b
mov eax, dword [ebp - 0xdc]
mov dword [esp + 0x18], esi
mov dword [esp + 0x1c], eax
mov eax, dword [ebx + 0x25c]
mov dword [esp + 0xc], 0x30
mov dword [esp + 0x14], eax
lea eax, [ebp - 0xc8]
mov dword [esp + 0x10], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 1
mov dword [esp], 0
call sym._HidP_GetUsageValue_32
sub esp, 0x20
cmp eax, 0x110000
je 0x6e903e75
test byte [0x6e9074c0], 4
jne 0x6e903d67
mov eax, dword [ebp - 0xdc]
mov dword [esp + 0x18], esi
mov dword [esp + 0x1c], eax
mov eax, dword [ebx + 0x25c]
mov dword [esp + 0xc], 0x31
mov dword [esp + 0x14], eax
lea eax, [ebp - 0xc8]
mov dword [esp + 0x10], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 1
mov dword [esp], 0
call sym._HidP_GetUsageValue_32
sub esp, 0x20
cmp eax, 0x110000
je 0x6e903f3c
test byte [0x6e9074c0], 4
jne 0x6e903d3a
mov eax, dword [ebp - 0xdc]
mov dword [esp + 0x18], esi
mov dword [esp + 0x1c], eax
mov eax, dword [ebx + 0x25c]
mov dword [esp + 0xc], 0x33
mov dword [esp + 0x14], eax
lea eax, [ebp - 0xc8]
mov dword [esp + 0x10], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 1
mov dword [esp], 0
call sym._HidP_GetUsageValue_32
sub esp, 0x20
cmp eax, 0x110000
je 0x6e903f13
test byte [0x6e9074c0], 4
jne 0x6e903d0d
mov eax, dword [ebp - 0xdc]
mov dword [esp + 0x18], esi
mov dword [esp + 0x1c], eax
mov eax, dword [ebx + 0x25c]
mov dword [esp + 0xc], 0x34
mov dword [esp + 0x14], eax
lea eax, [ebp - 0xc8]
mov dword [esp + 0x10], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 1
mov dword [esp], 0
call sym._HidP_GetUsageValue_32
sub esp, 0x20
cmp eax, 0x110000
je 0x6e903ee8
test byte [0x6e9074c0], 4
jne 0x6e903dee
mov eax, dword [ebp - 0xdc]
mov dword [esp + 0x18], esi
mov dword [esp + 0x1c], eax
mov eax, dword [ebx + 0x25c]
mov dword [esp + 0xc], 0x35
mov dword [esp + 0x14], eax
lea eax, [ebp - 0xc8]
mov dword [esp + 0x10], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 1
mov dword [esp], 0
call sym._HidP_GetUsageValue_32
sub esp, 0x20
cmp eax, 0x110000
je 0x6e903ec3
test byte [0x6e9074c0], 4
jne 0x6e903dc1
mov eax, dword [ebp - 0xdc]
mov dword [esp + 0x18], esi
mov dword [esp + 0x1c], eax
mov eax, dword [ebx + 0x25c]
mov dword [esp + 0xc], 0x32
mov dword [esp + 0x14], eax
lea eax, [ebp - 0xc8]
mov dword [esp + 0x10], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 1
mov dword [esp], 0
call sym._HidP_GetUsageValue_32
sub esp, 0x20
cmp eax, 0x110000
je 0x6e903e9e
test byte [0x6e9074c0], 4
jne 0x6e903d94
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_EnterCriticalSection]
mov ecx, dword [ebx + 0x258]
sub esp, 4
test ecx, ecx
jne 0x6e903c55
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_LeaveCriticalSection]
sub esp, 4
jmp 0x6e9035cd
or di, 0x80
jmp case.0x6e903849.0
or edi, 0x40
jmp case.0x6e903849.0
or edi, 0x10
jmp case.0x6e903849.0
or edi, 0x20
jmp case.0x6e903849.0
or di, 0x200
jmp case.0x6e903849.0
or di, 0x100
jmp case.0x6e903849.0
or di, 0x8000
jmp case.0x6e903849.0
or di, 0x1000
jmp case.0x6e903849.0
or di, 0x4000
jmp case.0x6e903849.0
or di, 0x2000
jmp case.0x6e903849.0
mov eax, ebx
call sym._controller_destroy.constprop.0
jmp 0x6e9035cd
test byte [0x6e9074c0], 2
jne 0x6e903f67
mov eax, dword [ebp - 0xe8]
mov dword [esp], eax
call dword [sym.imp.user32.dll_UnregisterDeviceNotification]
mov eax, dword [ebp - 0xe4]
sub esp, 4
mov dword [esp], eax
call dword [sym.imp.user32.dll_DestroyWindow]
mov eax, dword [0x6e90c018]
sub esp, 4
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x20]
mov dword [esp], eax
call dword [sym.imp.user32.dll_UnregisterClassW]
mov eax, dword [0x6e90c018]
sub esp, 8
mov dword [esp + 4], ebx
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_FreeLibraryAndExitThread]
cmp dword [ebp - 0xc8], 8
ja case.0x6e903c4e.0
mov eax, dword [ebp - 0xc8]
jmp dword [eax*4 + 0x6e909ad8]
movzx eax, byte [ebp - 0xe9]
mov word [ebx + 0x30], di
mov ecx, 4
mov edi, dword [ebp - 0xe0]
inc dword [ebx + 0x2c]
mov byte [ebx + 0x32], al
movzx eax, byte [ebp - 0xea]
mov byte [ebx + 0x33], al
movzx eax, word [ebp - 0xec]
mov word [ebx + 0x34], ax
movzx eax, word [ebp - 0xee]
mov word [ebx + 0x36], ax
movzx eax, word [ebp - 0xf0]
mov word [ebx + 0x38], ax
movzx eax, word [ebp - 0xf2]
mov word [ebx + 0x3a], ax
xor eax, eax
rep stosd dword es:[edi], eax
mov edi, dword [ebp - 0xe0]
mov eax, dword [ebx + 0x450]
mov dword [ebx + 0x464], eax
mov eax, dword [ebp - 0xdc]
mov dword [esp + 0x10], edi
mov dword [esp + 0xc], 0
mov dword [esp + 8], eax
mov dword [esp + 4], esi
mov eax, dword [ebx + 0x4c]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_ReadFile]
sub esp, 0x14
test eax, eax
jne 0x6e903b20
mov eax, dword fs:[0x18]
cmp dword [eax + 0x34], 0x3e5
je 0x6e903b20
mov eax, ebx
call sym._controller_destroy.constprop.0
jmp 0x6e903b20
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.HidP_GetUsageValue_HID_USAGE_PAGE_GENERIC___HID_USAGE_GENERIC_RX_returned__lx_n
mov dword [esp + 8], str.read_controller_state
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0
jmp 0x6e9039e3
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.HidP_GetUsageValue_HID_USAGE_PAGE_GENERIC___HID_USAGE_GENERIC_Y_returned__lx_n
mov dword [esp + 8], str.read_controller_state
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0
jmp 0x6e903982
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.HidP_GetUsageValue_HID_USAGE_PAGE_GENERIC___HID_USAGE_GENERIC_X_returned__lx_n
mov dword [esp + 8], str.read_controller_state
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0
jmp 0x6e903921
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.HidP_GetUsageValue_HID_USAGE_PAGE_GENERIC___HID_USAGE_GENERIC_Z_returned__lx_n
mov dword [esp + 8], str.read_controller_state
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0
jmp 0x6e903b06
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.HidP_GetUsageValue_HID_USAGE_PAGE_GENERIC___HID_USAGE_GENERIC_RZ_returned__lx_n
mov dword [esp + 8], str.read_controller_state
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0
jmp 0x6e903aa5
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.HidP_GetUsageValue_HID_USAGE_PAGE_GENERIC___HID_USAGE_GENERIC_RY_returned__lx_n
mov dword [esp + 8], str.read_controller_state
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0
jmp 0x6e903a44
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.HidP_GetUsageValue_HID_USAGE_PAGE_GENERIC___HID_USAGE_GENERIC_HATSWITCH_returned__lx_n
mov dword [esp + 8], str.read_controller_state
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0
jmp case.0x6e903c4e.0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.HidP_GetUsages_HID_USAGE_PAGE_BUTTON_returned__lx_n
mov dword [esp + 8], str.read_controller_state
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0
jmp 0x6e903824
mov dword [esp], 0x7fff
mov eax, dword [ebp - 0xc8]
lea edx, [ebx + 0x2a0]
mov ecx, 0xffff8000
call sym._scale_value
mov word [ebp - 0xec], ax
jmp 0x6e903921
mov dword [esp], 0xff
mov eax, dword [ebp - 0xc8]
lea edx, [ebx + 0x330]
xor ecx, ecx
call sym._scale_value
mov byte [ebp - 0xe9], al
jmp 0x6e903b06
mov dword [esp], 0xff
mov eax, dword [ebp - 0xc8]
lea edx, [ebx + 0x408]
xor ecx, ecx
call sym._scale_value
mov byte [ebp - 0xea], al
jmp 0x6e903aa5
mov dword [esp], 0x7fff
mov eax, dword [ebp - 0xc8]
lea edx, [ebx + 0x3c0]
mov ecx, 0xffff8000
call sym._scale_value
not eax
mov word [ebp - 0xf2], ax
jmp 0x6e903a44
mov dword [esp], 0x7fff
mov eax, dword [ebp - 0xc8]
lea edx, [ebx + 0x378]
mov ecx, 0xffff8000
call sym._scale_value
mov word [ebp - 0xf0], ax
jmp 0x6e9039e3
mov dword [esp], 0x7fff
mov eax, dword [ebp - 0xc8]
lea edx, [ebx + 0x2e8]
mov ecx, 0xffff8000
call sym._scale_value
not eax
mov word [ebp - 0xee], ax
jmp 0x6e903982
mov eax, dword fs:[0x18]
mov eax, dword [eax + 0x34]
mov dword [esp + 0x10], ebx
mov dword [esp + 0xc], str.wait_failed_in_the_update_thread__ret__lu__error__lu_n
mov dword [esp + 0x14], eax
mov dword [esp + 8], str.hid_update_thread_proc
mov dword [esp + 4], 0x6e9074c0
mov dword [esp], 1
call sym._wine_dbg_log.constprop.0
jmp 0x6e903bed
xor edi, edi
jmp 0x6e90385f
or edi, 1
jmp case.0x6e903c4e.0
or edi, 9
jmp case.0x6e903c4e.0
or edi, 8
jmp case.0x6e903c4e.0
or edi, 0xa
jmp case.0x6e903c4e.0
or edi, 2
jmp case.0x6e903c4e.0
or edi, 6
jmp case.0x6e903c4e.0
or edi, 4
jmp case.0x6e903c4e.0
or edi, 5
jmp case.0x6e903c4e.0