Function at 0x40f660
Capabilities:
Get disk information
Get disk size
Get file size

Disassembly:
mov ecx, dword [esp + 0x10]
sub esp, 0x220
push ebx
push ebp
xor ebp, ebp
push esi
or eax, 0xffffffff
cmp ecx, ebp
push edi
jne 0x40f67b
xor eax, eax
jmp 0x40f67d
mov dword [ecx], ebp
mov esi, dword [esp + 0x234]
mov cl, byte [esi]
neg cl
sbb ecx, ecx
test eax, ecx
jne 0x40f6a4
push 0x57
call fcn.0040bec0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x220
ret 0x10
push 0x4339e8
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
call fcn.0040f400
push 0x104
push esi
lea edx, [esp + 0x30]
push edx
call fcn.0040a2c0
lea ecx, [esp + 0x28]
mov byte [esp + 0x12b], 0
call fcn.0040f330
test eax, eax
jne 0x40f720
cmp byte [esi], 0x5c
je 0x40f710
mov edi, dword [sym.imp.MSVCRT.dll_strstr]
push 0x42bcf0
push esi
call edi
add esp, 8
test eax, eax
jne 0x40f710
push 0x42bcec
push esi
call edi
add esp, 8
test eax, eax
jne 0x40f710
push ebp
lea edx, [esp + 0x2c]
mov ecx, esi
call fcn.0040f340
jmp 0x40f720
push 0x104
push esi
lea eax, [esp + 0x30]
push eax
call fcn.0040a2c0
push 4
lea ecx, [esp + 0x2c]
push ecx
lea edx, [esp + 0x18]
push edx
call fcn.0040a2c0
lea eax, [esp + 0x10]
push eax
call dword [sym.imp.KERNEL32.dll_GetDriveTypeA]
push 0x104
mov esi, eax
xor eax, eax
mov ecx, 0x41
lea edi, [esp + 0x130]
rep stosd dword es:[edi], eax
lea ecx, [esp + 0x130]
push ecx
lea edx, [esp + 0x24]
push edx
push ebp
push ebp
push ebp
push ebp
lea eax, [esp + 0x2c]
push eax
mov dword [esp + 0x3c], ebp
call dword [sym.imp.KERNEL32.dll_GetVolumeInformationA]
test eax, eax
jne 0x40f77b
xor edi, edi
jmp 0x40f7ee
lea ecx, [esp + 0x20]
push ecx
lea edx, [esp + 0x1c]
push edx
lea eax, [esp + 0x1c]
push eax
lea ecx, [esp + 0x30]
push ecx
lea edx, [esp + 0x20]
push edx
mov dword [esp + 0x38], ebp
mov dword [esp + 0x28], ebp
mov dword [esp + 0x2c], ebp
mov dword [esp + 0x34], ebp
call dword [sym.imp.KERNEL32.dll_GetDiskFreeSpaceA]
test eax, eax
jne 0x40f7b2
xor edi, edi
jmp 0x40f7ee
mov eax, dword [esp + 0x1c]
mov edx, dword [esp + 0x12c]
mov ecx, dword [esp + 0x18]
mov ebx, dword [esp + 0x14]
and eax, 4
xor eax, edx
xor eax, ecx
xor eax, ebx
xor eax, esi
mov ecx, eax
shr ecx, 0x10
xor ecx, eax
cmp cx, 0x1f00
je 0x40f7e9
cmp cx, 0x805
je 0x40f7e9
xor edi, edi
jmp 0x40f7ee
mov edi, 1
mov ebx, dword [esp + 0x23c]
test bl, 1
je 0x40f81f
cmp edi, ebp
jne 0x40f81f
push 0xf
call fcn.0040bec0
push 0x4339e8
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x220
ret 0x10
push ebp
push ebp
push 3
push ebp
push 1
push 0x80000000
lea eax, [esp + 0x40]
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileA]
mov ebp, eax
cmp ebp, 0xffffffff
jne 0x40f857
push 0x4339e8
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x220
ret 0x10
push 8
push 0xfffffffffffffffe
push str.._AUARCHIVEREC_SFile_Storm__
push 0x25c
call fcn.004089f0
xor esi, esi
cmp eax, esi
je 0x40f877
mov dword [eax], esi
mov dword [eax + 4], esi
mov esi, eax
push 0x104
lea ecx, [esp + 0x2c]
push ecx
lea edx, [esi + 8]
push edx
call fcn.0040a2c0
mov ecx, dword [esp + 0x238]
mov eax, edi
neg eax
sbb eax, eax
and eax, 3
test edi, edi
mov dword [esi + 0x10c], ebp
mov dword [esi + 0x110], eax
mov dword [esi + 0x118], ecx
mov dword [esi + 0x148], 1
je 0x40f8c6
mov dword [esi + 0x110], 3
jmp 0x40f8d5
xor edx, edx
mov dl, bl
shr edx, 1
and edx, 1
mov dword [esi + 0x110], edx
push 0
push 0x1050
mov eax, ebx
shr eax, 2
push str.C:SrcStormSourceSFile.cpp
and eax, 1
push 0x20
mov dword [esi + 0x114], eax
call fcn.004089f0
push 0
push ebp
mov dword [esi + 0x138], eax
mov dword [esi + 0x130], 0
call dword [sym.imp.KERNEL32.dll_GetFileSize]
mov ecx, dword [esp + 0x240]
push ecx
push edi
mov edx, ebx
mov ecx, esi
mov dword [esi + 0x134], eax
mov dword [esi + 0x258], 0
call fcn.0040f950
push 0x4339e8
mov esi, eax
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
pop edi
mov eax, esi
pop esi
pop ebp
pop ebx
add esp, 0x220
ret 0x10