Function at 0xb3e58
Capabilities:
Complete processing asynchronous io request

Disassembly:
push ebp
mov ebp, esp
push ecx
push ebx
mov ebx, dword [ebp + 0x14]
push esi
push edi
push ebx
call fcn.00012e66
mov edx, dword [ebp + 0x10]
movzx eax, byte [edx + 1]
push 4
pop ecx
cmp eax, ecx
jg 0xb3fde
je 0xb3fb0
xor esi, esi
sub eax, esi
je 0xb3f81
dec eax
je 0xb3f73
dec eax
je 0xb3eb1
dec eax
jne 0xb419b
cmp dword [ebx + 8], ecx
jne 0xb3ea6
mov eax, dword [ebx + 0xc]
mov dword [ebx + 8], eax
mov eax, dword [ebp + 0xc]
mov dword [eax + 0x18], esi
jmp 0xb419b
cmp dword [ebx + 8], 5
je 0xb3ebd
push ebx
call fcn.000b3b40
mov eax, dword [ebx + 8]
push ebx
mov dword [ebx + 0xc], eax
mov dword [ebx + 8], 6
call fcn.00012e88
push ebx
call fcn.00012e88
push esi
push esi
push esi
push esi
lea eax, [ebx + 0x54]
push eax
call dword [sym.imp.ntoskrnl.exe_KeWaitForSingleObject]
lea ecx, [ebx + 0x30]
call dword [sym.imp.HAL.dll_ExAcquireFastMutex]
lea edi, [ebx + 0x24]
mov eax, dword [edi]
cmp eax, edi
mov ecx, dword [eax]
mov dword [ebp + 0x14], ecx
je 0xb3f39
lea ecx, [eax - 0x28]
lea eax, [ecx + 0x28]
mov edx, dword [eax]
mov esi, dword [eax + 4]
mov dword [esi], edx
mov dword [edx + 4], esi
cmp dword [ecx + 8], 5
jne 0xb3f20
mov dword [eax + 4], eax
mov dword [eax], eax
and dword [ecx + 0x1c], 0
mov byte [ecx + 0x31], 1
jmp 0xb3f2b
dec dword [ebx + 0x2c]
push ecx
push dword [ecx]
call fcn.000b3b6c
mov eax, dword [ebp + 0x14]
cmp eax, edi
mov ecx, dword [eax]
mov dword [ebp + 0x14], ecx
jne 0xb3efb
xor esi, esi
lea ecx, [ebx + 0x30]
call dword [sym.imp.HAL.dll_ExReleaseFastMutex]
mov edx, dword [ebp + 0xc]
inc byte [edx + 0x23]
add dword [edx + 0x60], 0x24
mov dword [edx + 0x18], esi
mov ecx, dword [ebx + 0x20]
call dword [sym.imp.ntoskrnl.exe_IofCallDriver]
push dword [ebx + 0x20]
mov esi, eax
call dword [sym.imp.ntoskrnl.exe_IoDetachDevice]
push dword [ebp + 8]
call dword [sym.imp.ntoskrnl.exe_IoDeleteDevice]
mov eax, esi
jmp 0xb41b8
mov eax, dword [ebx + 8]
mov dword [ebx + 0xc], eax
mov dword [ebx + 8], ecx
jmp 0xb3ea6
push dword [ebp + 0xc]
push dword [ebx + 0x20]
call fcn.000b3dea
mov edi, eax
cmp edi, esi
jl 0xb3f9d
push dword [ebp + 0xc]
push ebx
call fcn.000b3b1a
mov edi, eax
mov ecx, dword [ebp + 0xc]
xor dl, dl
mov dword [ecx + 0x18], edi
call dword [sym.imp.ntoskrnl.exe_IofCompleteRequest]
jmp 0xb41b0
push ebx
call fcn.00012e88
xor esi, esi
push esi
push esi
push esi
push esi
lea eax, [ebx + 0x64]
push eax
call dword [sym.imp.ntoskrnl.exe_KeWaitForSingleObject]
push ebx
call fcn.00012e66
mov eax, dword [ebx + 8]
mov dword [ebx + 0xc], eax
mov dword [ebx + 8], 3
jmp 0xb3ea6
push 5
pop ecx
sub eax, ecx
je 0xb4187
dec eax
je 0xb4179
dec eax
je 0xb404f
sub eax, 0x10
jne 0xb419b
mov eax, dword [ebx + 8]
push ebx
mov dword [ebx + 0xc], eax
mov dword [ebx + 8], ecx
call fcn.000b3b40
lea ecx, [ebx + 0x30]
call dword [sym.imp.HAL.dll_ExAcquireFastMutex]
lea eax, [ebx + 0x24]
mov ecx, dword [eax]
mov edx, dword [ecx]
jmp 0xb403d
mov eax, ecx
mov esi, dword [eax]
mov edi, dword [eax + 4]
mov dword [edi], esi
mov dword [esi + 4], edi
mov dword [eax + 4], eax
mov dword [eax], eax
and dword [ecx - 0xc], 0
mov byte [ecx + 9], 1
mov ecx, edx
mov edx, dword [edx]
lea eax, [ebx + 0x24]
cmp ecx, eax
jne 0xb401d
lea ecx, [ebx + 0x30]
call dword [sym.imp.HAL.dll_ExReleaseFastMutex]
jmp 0xb4194
xor edi, edi
cmp dword [edx + 4], edi
jne 0xb419b
mov ecx, dword [ebp + 8]
mov eax, dword [ecx + 0x28]
add eax, 0x7c
cmp dword [eax], edi
jle 0xb4074
or edx, 0xffffffff
lock xadd dword [eax], edx
push ecx
call fcn.0001264e
lea esi, [ebx + 0x30]
mov ecx, esi
call dword [sym.imp.HAL.dll_ExAcquireFastMutex]
mov eax, dword [ebp + 0xc]
mov eax, dword [eax + 0x1c]
cmp eax, edi
mov dword [ebp + 0x14], eax
je 0xb40a4
cmp dword [ebx + 0x2c], 0
mov edi, dword [eax]
mov dword [ebp + 8], edi
jne 0xb40a7
mov ecx, esi
call dword [sym.imp.HAL.dll_ExReleaseFastMutex]
jmp 0xb419b
mov dword [ebp + 8], edi
lea ecx, [ebx + 0x24]
mov eax, dword [ecx]
xor esi, esi
jmp 0xb40b9
cmp byte [eax + 8], 0
je 0xb40b7
inc esi
mov eax, dword [eax]
cmp eax, ecx
jne 0xb40b0
add esi, edi
push 0x62735556
lea eax, [esi*4 + 7]
push eax
push 1
mov dword [ebp - 4], esi
call dword [sym.imp.ntoskrnl.exe_ExAllocatePoolWithTag]
test eax, eax
mov dword [ebp + 0x10], eax
jne 0xb4101
lea ecx, [ebx + 0x30]
call dword [sym.imp.HAL.dll_ExReleaseFastMutex]
mov ecx, dword [ebp + 0xc]
mov esi, 0xc000009a
xor dl, dl
mov dword [ecx + 0x18], esi
call dword [sym.imp.ntoskrnl.exe_IofCompleteRequest]
mov edi, esi
jmp 0xb41b0
test edi, edi
je 0xb4118
mov esi, dword [ebp + 0x14]
mov ecx, edi
add esi, 4
lea edi, [eax + 4]
rep movsd dword es:[edi], dword [esi]
mov esi, dword [ebp - 4]
mov edi, dword [ebp + 8]
lea ecx, [ebx + 0x24]
mov dword [eax], esi
mov esi, dword [ecx]
cmp esi, ecx
je 0xb4150
lea edi, [eax + edi*4 + 4]
cmp byte [esi + 8], 0
je 0xb4143
mov eax, dword [esi - 0x28]
mov dword [edi], eax
mov ecx, dword [esi - 0x28]
call dword [sym.imp.ntoskrnl.exe_ObfReferenceObject]
mov eax, dword [ebp + 0x10]
add edi, 4
jmp 0xb4147
mov byte [esi + 9], 1
mov esi, dword [esi]
lea ecx, [ebx + 0x24]
cmp esi, ecx
jne 0xb4127
cmp dword [ebp + 0x14], 0
je 0xb4164
push 0
push dword [ebp + 0x14]
call dword [sym.imp.ntoskrnl.exe_ExFreePoolWithTag]
mov eax, dword [ebp + 0x10]
mov esi, dword [ebp + 0xc]
lea ecx, [ebx + 0x30]
mov dword [esi + 0x1c], eax
call dword [sym.imp.HAL.dll_ExReleaseFastMutex]
and dword [esi + 0x18], 0
jmp 0xb419b
cmp dword [ebx + 8], 2
jne 0xb4194
mov eax, dword [ebx + 0xc]
mov dword [ebx + 8], eax
jmp 0xb4194
mov eax, dword [ebx + 8]
mov dword [ebx + 0xc], eax
mov dword [ebx + 8], 2
mov eax, dword [ebp + 0xc]
and dword [eax + 0x18], 0
mov edx, dword [ebp + 0xc]
inc byte [edx + 0x23]
add dword [edx + 0x60], 0x24
mov ecx, dword [ebx + 0x20]
call dword [sym.imp.ntoskrnl.exe_IofCallDriver]
mov edi, eax
push ebx
call fcn.00012e88
mov eax, edi
pop edi
pop esi
pop ebx
leave
ret 0x10