Function at 0x1002bb70
Capabilities:
Get disk information

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x10082fa0
mov eax, dword fs:[0]
push eax
sub esp, 0x30
push ebx
push esi
push edi
mov eax, dword [section..data]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov dword [ebp - 0x34], edx
mov edi, ecx
mov dword [ebp - 0x30], edi
mov dword [ebp - 0x38], 0
mov dword [ebp - 4], 0
call fcn.10021470
mov ecx, eax
xor eax, eax
test ecx, ecx
setne al
test eax, eax
jne 0x1002bbca
push 0x80004005
call fcn.10021340
mov eax, dword [ecx]
call dword [eax + 0xc]
lea esi, [eax + 0x10]
mov dword [ebp - 0x18], esi
mov byte [ebp - 4], 1
mov eax, dword [ebp + 8]
cmp dword [eax - 0xc], 0
jge 0x1002bbec
push 0x80070057
call fcn.10021340
movzx eax, word [eax]
push eax
call fcn.1006c478
mov ebx, eax
add esp, 4
mov dword [ebp - 0x24], ebx
lea ecx, [ebx - 0x41]
cmp ecx, 0x19
ja 0x1002c075
mov ecx, dword [ebp + 8]
cmp dword [ecx - 0xc], 1
jge 0x1002bc1c
push 0x80070057
call fcn.10021340
cmp word [ecx + 2], 0x3a
jne 0x1002c075
cmp dword [0x100b0f94], 0
jne 0x1002bc35
call fcn.1002d440
push 0x100b2d90
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
mov edi, dword [ebx*4 + 0x100b2ca4]
or ebx, 0xffffffff
cmp edi, ebx
jne 0x1002bf63
push dword [ebp - 0x24]
lea eax, [ebp - 0x1c]
push str._c:_
push eax
call fcn.1003a800
add esp, 0xc
mov byte [ebp - 4], 2
push dword [ebp - 0x1c]
call dword [sym.imp.KERNEL32.dll_GetDriveTypeW]
mov edi, eax
mov eax, dword [ebp - 0x24]
cmp edi, 1
push 0x1008fa88
cmove edi, ebx
mov dword [eax*4 + 0x100b2ca4], edi
lea eax, [eax*4 + 0x100b2d0c]
mov ecx, eax
mov dword [ebp - 0x28], edi
mov dword [ebp - 0x14], eax
call fcn.10022c70
cmp edi, ebx
je 0x1002bf41
push 0x1008fa88
lea ecx, [ebp - 0x10]
call fcn.10022bb0
push dword [ebp - 0x24]
lea eax, [ebp - 0x20]
mov byte [ebp - 4], 3
push 0x10092a30
push eax
call fcn.1003a800
add esp, 0xc
mov dword [ebp - 0x2c], eax
mov byte [ebp - 4], 4
mov edi, 1
mov ecx, dword [ebp - 0x10]
mov edx, dword [ecx - 8]
sub edi, dword [ecx - 4]
sub edx, 0x104
or edx, edi
jge 0x1002bcfd
push 0x104
lea ecx, [ebp - 0x10]
call fcn.10023670
mov ecx, dword [ebp - 0x10]
mov eax, dword [ebp - 0x2c]
push 0x104
push ecx
push dword [eax]
call dword [sym.imp.KERNEL32.dll_QueryDosDeviceW]
lea ecx, [ebp - 0x20]
mov byte [ebp - 4], 3
mov edi, eax
call fcn.10022680
push ecx
lea ecx, [ebp - 0x10]
call fcn.100230b0
test edi, edi
je 0x1002bf36
push ecx
mov ecx, dword [ebp - 0x10]
mov edi, esp
lea ecx, [ecx - 0x10]
call fcn.100236e0
add eax, 0x10
lea ecx, [ebp - 0x2c]
mov dword [edi], eax
call fcn.1002c0e0
add esp, 4
mov edi, dword [ebp - 0x14]
mov ecx, edi
push eax
mov byte [ebp - 4], 5
call fcn.100232f0
lea ecx, [ebp - 0x2c]
mov byte [ebp - 4], 3
call fcn.10022680
cmp dword [ebp - 0x28], 3
jne 0x1002bec9
push ecx
mov ecx, esp
push str.CAMEYO_DETECTSUBST
call fcn.10022bb0
mov edx, 0x104
lea ecx, [ebp - 0x2c]
call fcn.1003dc20
add esp, 4
mov edx, 0x1008f1e4
mov byte [ebp - 4], 6
lea ecx, [ebp - 0x2c]
call fcn.10023020
test al, al
je 0x1002bebd
push ecx
mov eax, esp
push dword [ebp - 0x1c]
push dword [ebp - 0x10]
push str.ResolveDosDrive:_checking_drive__s___s_
push eax
call fcn.1003a800
add esp, 0x10
call fcn.10021810
add esp, 4
push dword [0x100b0f9c]
push 0
push ecx
mov ecx, dword [ebp - 0x1c]
mov edi, esp
lea ecx, [ecx - 0x10]
call fcn.100236e0
add eax, 0x10
mov edx, 5
mov ecx, 0x120089
mov dword [edi], eax
call fcn.1002fa50
add esp, 0xc
lea ecx, [ebp - 0x20]
mov edx, eax
push 0
call fcn.1002d0e0
add esp, 4
mov byte [ebp - 4], 7
mov eax, dword [ebp - 0x20]
cmp dword [eax - 0xc], 0
je 0x1002beae
push dword [ebp - 0x1c]
lea ecx, [ebp - 0x20]
call fcn.10022cc0
test eax, eax
je 0x1002beae
push ecx
mov eax, esp
push dword [ebp - 0x20]
push dword [ebp - 0x1c]
push str.ResolveDosDrive:_detected_SUBST_drive:__s_____s
push eax
call fcn.1003a800
add esp, 0x10
call fcn.10021810
mov eax, dword [ebp - 0x24]
add esp, 4
mov ecx, dword [ebp - 0x14]
mov dword [ebp - 0x28], 0x63
mov dword [eax*4 + 0x100b2ca4], 0x63
mov eax, dword [ebp - 0x20]
mov edi, dword [ecx]
sub edi, 0x10
lea edx, [eax - 0x10]
mov dword [ebp - 0x24], edx
cmp edx, edi
je 0x1002beb3
cmp dword [edi + 0xc], 0
jl 0x1002bea5
mov edx, dword [edx]
cmp edx, dword [edi]
jne 0x1002bea5
mov ecx, dword [ebp - 0x24]
call fcn.100236e0
mov dword [ebp - 0x24], eax
mov ecx, ebx
lea eax, [edi + 0xc]
lock xadd dword [eax], ecx
dec ecx
test ecx, ecx
jg 0x1002be98
mov ecx, dword [edi]
push edi
mov edx, dword [ecx]
call dword [edx + 4]
mov edi, dword [ebp - 0x14]
mov eax, dword [ebp - 0x24]
add eax, 0x10
mov dword [edi], eax
jmp 0x1002beb5
push dword [eax - 0xc]
push eax
call fcn.10023530
mov edi, dword [ebp - 0x14]
jmp 0x1002beb5
mov edi, ecx
lea ecx, [ebp - 0x20]
call fcn.10022680
lea ecx, [ebp - 0x2c]
mov byte [ebp - 4], 3
call fcn.10022680
mov edx, dword [edi]
lea edi, [esi - 0x10]
lea ecx, [edx - 0x10]
cmp ecx, edi
je 0x1002bf19
cmp dword [edi + 0xc], 0
lea esi, [edi + 0xc]
jl 0x1002bf0a
mov eax, dword [ecx]
cmp eax, dword [edi]
jne 0x1002bf0a
call fcn.100236e0
mov dword [ebp - 0x24], eax
mov ecx, ebx
lock xadd dword [esi], ecx
dec ecx
test ecx, ecx
jg 0x1002bf02
mov ecx, dword [edi]
push edi
mov edx, dword [ecx]
call dword [edx + 4]
mov eax, dword [ebp - 0x24]
lea esi, [eax + 0x10]
mov dword [ebp - 0x18], esi
jmp 0x1002bf19
push dword [edx - 0xc]
lea ecx, [ebp - 0x18]
push edx
call fcn.10023530
mov esi, dword [ebp - 0x18]
push ecx
mov eax, esp
push esi
push dword [ebp - 0x10]
push str.ResolveDosDrive:_DeviceFileName_s____DosDriveCache_s
push eax
call fcn.1003a800
add esp, 0x10
call fcn.10021810
add esp, 4
lea ecx, [ebp - 0x10]
call fcn.10022680
mov edi, dword [ebp - 0x28]
mov byte [ebp - 4], 1
mov ecx, ebx
mov edx, dword [ebp - 0x1c]
add edx, 0xfffffff0
lea eax, [edx + 0xc]
lock xadd dword [eax], ecx
dec ecx
test ecx, ecx
jg 0x1002bfc7
mov ecx, dword [edx]
push edx
mov eax, dword [ecx]
call dword [eax + 4]
jmp 0x1002bfc7
mov eax, dword [ebp - 0x24]
lea ecx, [esi - 0x10]
mov dword [ebp - 0x28], ecx
mov edx, dword [eax*4 + 0x100b2d0c]
lea eax, [edx - 0x10]
mov dword [ebp - 0x2c], eax
cmp eax, ecx
je 0x1002bfc7
cmp dword [ecx + 0xc], 0
lea esi, [ecx + 0xc]
jl 0x1002bfb8
mov eax, dword [eax]
cmp eax, dword [ecx]
jne 0x1002bfb8
mov ecx, dword [ebp - 0x2c]
call fcn.100236e0
mov dword [ebp - 0x2c], eax
mov ecx, ebx
lock xadd dword [esi], ecx
dec ecx
test ecx, ecx
jg 0x1002bfb0
mov esi, dword [ebp - 0x28]
push esi
mov ecx, dword [esi]
mov edx, dword [ecx]
call dword [edx + 4]
mov eax, dword [ebp - 0x2c]
lea esi, [eax + 0x10]
mov dword [ebp - 0x18], esi
jmp 0x1002bfc7
push dword [edx - 0xc]
lea ecx, [ebp - 0x18]
push edx
call fcn.10023530
mov esi, dword [ebp - 0x18]
push 0x100b2d90
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
cmp dword [ebp - 0x34], 0
je 0x1002c014
cmp edi, 4
je 0x1002c014
cmp edi, 0x63
je 0x1002c014
mov ecx, dword [ebp - 0x30]
push 0x1008fa88
call fcn.10022bb0
lea ecx, [ebp - 0x18]
call fcn.10022680
lea ecx, [ebp + 8]
call fcn.10022680
mov eax, dword [ebp - 0x30]
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
lea edi, [esi - 0x10]
mov ecx, edi
call fcn.100236e0
mov esi, dword [ebp - 0x30]
add eax, 0x10
mov byte [ebp - 4], 0
mov ecx, ebx
mov dword [esi], eax
lea eax, [edi + 0xc]
lock xadd dword [eax], ecx
dec ecx
test ecx, ecx
jg 0x1002c040
mov ecx, dword [edi]
push edi
mov eax, dword [ecx]
call dword [eax + 4]
mov dword [ebp - 4], 0xffffffff
mov edx, dword [ebp + 8]
add edx, 0xfffffff0
lea eax, [edx + 0xc]
lock xadd dword [eax], ebx
dec ebx
test ebx, ebx
jg 0x1002c061
mov ecx, dword [edx]
push edx
mov eax, dword [ecx]
call dword [eax + 4]
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push 0x1008fa88
mov ecx, edi
call fcn.10022bb0
add esi, 0xfffffff0
mov byte [ebp - 4], 0
or ebx, 0xffffffff
mov eax, ebx
lea ecx, [esi + 0xc]
lock xadd dword [ecx], eax
dec eax
test eax, eax
jg 0x1002c0a1
mov ecx, dword [esi]
push esi
mov eax, dword [ecx]
call dword [eax + 4]
mov dword [ebp - 4], 0xffffffff
mov edx, dword [ebp + 8]
add edx, 0xfffffff0
lea eax, [edx + 0xc]
lock xadd dword [eax], ebx
dec ebx
test ebx, ebx
jg 0x1002c0c2
mov ecx, dword [edx]
push edx
mov eax, dword [ecx]
call dword [eax + 4]
mov eax, edi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret