Function at 0x479170
Capabilities:
Get storage device properties

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
mov eax, 0x1150
call sym.__alloca
mov esi, edx
mov edi, ecx
sub esp, 0x1c
movapd xmm0, xmmword [0x4f9790]
movupd xmmword [esp + 4], xmm0
mov dword [esp], ecx
mov dword [esp + 0x18], 0
mov dword [esp + 0x14], 0
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov ebx, eax
cmp eax, 0xffffffff
je 0x479e62
mov dword [esp + 0x34], 0
mov dword [esp + 0x38], 0
mov byte [esp + 0x3c], 0
lea edx, [esp + 4]
lea eax, [esp + 0x14c]
lea ecx, [esp + 0x34]
push 0
push edx
push 0x1000
push eax
push 0xc
push ecx
push 0x2d1400
push ebx
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
je 0x479e62
cmp dword [esp + 4], 0
je 0x479e62
mov eax, dword [esi]
mov ecx, dword [esi + 8]
cmp ecx, dword [esi + 0xc]
jne 0x479238
lea edx, [ecx + ecx]
test ecx, ecx
mov ecx, 0x10
cmovne ecx, edx
mov dword [esi + 0xc], ecx
imul ecx, dword [esi + 4]
push ecx
push eax
call sym._realloc
add esp, 8
mov dword [esi], eax
mov ecx, dword [esi + 8]
lea edx, [ecx + 1]
mov dword [esi + 8], edx
imul ecx, dword [esi + 4]
mov dword [eax + ecx + 0x3c], 0
mov dword [eax + ecx], 0
mov dword [eax + ecx + 4], 0
mov edx, dword [0x5052b0]
mov dword [eax + ecx + 8], edx
lea edx, [eax + ecx]
mov eax, dword [esp + 0x158]
test eax, eax
mov dword [esp + 0x10], ebx
mov dword [esp], edx
mov dword [esp + 8], edi
mov dword [esp + 0x14], esi
je 0x479398
lea ebx, [esp + eax]
add ebx, 0x14c
mov eax, dword [0x5052b0]
mov dword [edx + 8], eax
push ebx
call sym._strlen
add esp, 4
xor ecx, ecx
test eax, eax
je 0x4793ae
mov esi, eax
mov dword [esp + 0xc], ebx
inc eax
mov ecx, 0x20
nop word cs:[eax + eax]
mov ebx, ecx
add ecx, ecx
cmp eax, ebx
ja 0x4792c0
push ebx
call sym._malloc
add esp, 4
mov byte [eax], 0
mov edi, dword [esp]
mov dword [edi + 8], eax
mov dword [edi], ebx
push esi
push dword [esp + 0x10]
push eax
call sym._memcpy
mov edx, edi
add esp, 0xc
mov eax, dword [edi + 4]
add eax, esi
mov dword [edi + 4], eax
mov ecx, dword [edi + 8]
mov byte [ecx + eax], 0
mov eax, dword [edi + 4]
test eax, eax
je 0x4793b6
mov esi, dword [edx + 8]
cmp byte [eax + esi - 1], 0x20
mov ecx, 0
jne 0x4793c1
inc eax
nop word [eax + eax]
mov edi, eax
add eax, 0xfffffffe
mov dword [edx + 4], eax
cmp edi, 2
je 0x4793c7
lea eax, [edi - 1]
cmp byte [esi + edi - 3], 0x20
je 0x479320
cmp dword [edx], 0
jne 0x4793cc
lea ecx, [eax - 1]
mov dword [esp + 0xc], ecx
mov dword [edx + 4], 0
mov ecx, 0x20
nop word [eax + eax]
mov ebx, ecx
add ecx, ecx
cmp eax, ebx
ja 0x479360
push ebx
call sym._malloc
add esp, 4
mov byte [eax], 0
mov ecx, dword [esp]
mov dword [ecx + 8], eax
mov dword [ecx], ebx
mov ebx, dword [esp + 0xc]
push ebx
push esi
push eax
mov esi, eax
call sym._memcpy
mov edx, dword [esp + 0xc]
add esp, 0xc
mov dword [edx + 4], ebx
xor ecx, ecx
jmp 0x4793cc
mov eax, dword [esp + 0x15c]
xor ebx, ebx
test eax, eax
jne 0x47951f
jmp 0x4796a4
mov edx, dword [esp]
jmp 0x479459
mov edi, dword [esp + 8]
xor ecx, ecx
jmp 0x479459
mov edi, dword [esp + 8]
jmp 0x4793dc
cmp dword [edx], 0
je 0x479440
mov byte [esi + edi - 2], 0
mov eax, dword [edx + 4]
test eax, eax
mov edi, dword [esp + 8]
je 0x479459
mov ecx, dword [edx + 8]
xor esi, esi
nop word cs:[eax + eax]
cmp byte [ecx + esi], 0x20
jne 0x4793fd
inc esi
cmp eax, esi
jne 0x4793f0
mov esi, eax
test esi, esi
je 0x47942e
cmp dword [edx], 0
je 0x479432
lea edx, [ecx + esi]
sub eax, esi
push eax
push edx
push ecx
call sym._memmove
mov edx, dword [esp + 0xc]
add esp, 0xc
mov eax, dword [edx + 4]
mov ecx, dword [edx + 8]
sub eax, esi
mov dword [edx + 4], eax
mov byte [ecx + eax], 0
mov ecx, dword [edx + 4]
jmp 0x479459
mov ecx, eax
jmp 0x479459
sub eax, esi
mov dword [edx + 4], eax
add ecx, esi
mov dword [edx + 8], ecx
mov ecx, eax
jmp 0x479459
mov dword [edx], 0
mov dword [edx + 4], 0
mov eax, dword [0x5052b0]
mov dword [edx + 8], eax
mov edi, dword [esp + 8]
mov eax, dword [esp + 0x15c]
test eax, eax
je 0x4794b8
test ecx, ecx
je 0x4794c9
mov eax, dword [edx]
test eax, eax
je 0x479475
lea ebx, [ecx + 1]
cmp eax, ebx
jne 0x4794cd
cmp eax, 2
mov edx, ecx
mov ecx, 0x20
cmovae ecx, eax
mov ebx, edx
add edx, 2
nop word [eax + eax]
mov edi, ecx
add ecx, ecx
cmp edx, edi
ja 0x479490
test eax, eax
je 0x4794d2
push edi
mov esi, dword [esp + 4]
push dword [esi + 8]
call sym._realloc
mov edx, esi
add esp, 8
mov esi, eax
mov ecx, dword [edx + 4]
lea ebx, [ecx + 1]
jmp 0x4794fb
mov esi, dword [esp + 0x14]
test ecx, ecx
jne 0x4796fe
jmp 0x4796a4
xor ebx, ebx
jmp 0x47951f
mov esi, dword [edx + 8]
jmp 0x479504
push edi
call sym._malloc
add esp, 4
mov esi, eax
mov dword [esp + 0xc], ebx
inc ebx
push ebx
mov eax, dword [esp + 4]
push dword [eax + 8]
push esi
call sym._memcpy
mov ecx, dword [esp + 0x18]
mov edx, dword [esp + 0xc]
add esp, 0xc
mov dword [edx + 8], esi
mov dword [edx], edi
mov edi, dword [esp + 8]
mov dword [edx + 4], ebx
mov byte [esi + ecx], 0x20
mov eax, dword [edx + 4]
mov ecx, dword [edx + 8]
mov byte [ecx + eax], 0
mov eax, dword [esp + 0x15c]
mov ebx, dword [edx + 4]
add eax, esp
add eax, 0x14c
mov dword [esp + 0xc], eax
push eax
call sym._strlen
add esp, 4
test eax, eax
je 0x479586
mov esi, eax
mov edi, dword [esp]
mov eax, dword [edi]
test eax, eax
je 0x47954c
mov ecx, ebx
not ecx
add ecx, eax
cmp ecx, esi
jae 0x47958b
cmp eax, 2
mov ecx, 0x20
cmovae ecx, eax
lea edx, [esi + ebx]
inc edx
nop dword [eax + eax]
mov edi, ecx
add ecx, ecx
cmp edx, edi
ja 0x479560
test eax, eax
je 0x479590
push edi
mov ebx, dword [esp + 4]
push dword [ebx + 8]
call sym._realloc
mov ecx, ebx
add esp, 8
mov dword [ebx + 8], eax
mov ebx, dword [ebx + 4]
jmp 0x4795c8
mov edx, dword [esp]
jmp 0x4795f4
mov eax, dword [edi + 8]
jmp 0x4795cc
push edi
call sym._malloc
add esp, 4
test ebx, ebx
je 0x4795bf
lea ecx, [ebx + 1]
push ecx
mov ecx, dword [esp + 4]
push dword [ecx + 8]
push eax
mov dword [esp + 0x24], eax
call sym._memcpy
mov eax, dword [esp + 0x24]
mov ecx, dword [esp + 0xc]
add esp, 0xc
jmp 0x4795c5
mov byte [eax], 0
mov ecx, dword [esp]
mov dword [ecx + 8], eax
mov dword [ecx], edi
mov edi, ecx
add ebx, eax
push esi
push dword [esp + 0x10]
push ebx
call sym._memcpy
add esp, 0xc
mov eax, dword [edi + 4]
add eax, esi
mov dword [edi + 4], eax
mov ecx, dword [edi + 8]
mov byte [ecx + eax], 0
mov ebx, dword [edi + 4]
mov edx, edi
mov edi, dword [esp + 8]
mov esi, dword [esp + 0x14]
test ebx, ebx
je 0x4796a4
mov ecx, dword [edx + 8]
cmp byte [ebx + ecx - 1], 0x20
jne 0x4796fe
inc ebx
nop
mov edi, ebx
lea eax, [ebx - 2]
mov dword [edx + 4], eax
cmp ebx, 2
je 0x47968f
lea ebx, [edi - 1]
cmp byte [ecx + edi - 3], 0x20
je 0x479610
cmp dword [edx], 0
jne 0x479694
mov dword [esp + 0xc], ecx
lea eax, [ebx - 1]
mov dword [esp + 0x18], eax
mov dword [edx + 4], 0
mov eax, 0x20
nop word cs:[eax + eax]
mov esi, eax
add eax, eax
cmp ebx, esi
ja 0x479650
push esi
call sym._malloc
add esp, 4
mov ebx, eax
mov byte [eax], 0
mov eax, dword [esp]
mov dword [eax + 8], ebx
mov dword [eax], esi
mov esi, dword [esp + 0x18]
push esi
push dword [esp + 0x10]
push ebx
call sym._memcpy
mov edx, dword [esp + 0xc]
add esp, 0xc
mov dword [edx + 4], esi
mov ecx, ebx
mov esi, dword [esp + 0x14]
jmp 0x479694
cmp dword [edx], 0
je 0x4796c5
mov byte [ecx + edi - 2], 0
mov ecx, dword [edx + 4]
mov edi, dword [esp + 8]
test ecx, ecx
jne 0x4796fe
test edi, edi
je 0x4796e2
push edi
call sym._wcslen
add esp, 4
push edi
push eax
push dword [esp + 8]
call dbg.ffStrbufSetNWS
mov edx, dword [esp + 0xc]
add esp, 0xc
jmp 0x4796fe
mov dword [edx], 0
mov dword [edx + 4], 0
mov eax, dword [0x5052b0]
mov dword [edx + 8], eax
mov edi, dword [esp + 8]
test edi, edi
jne 0x4796a8
cmp dword [edx], 0
je 0x4796ef
mov eax, dword [edx + 8]
mov byte [eax], 0
jmp 0x4796f7
mov eax, dword [0x5052b0]
mov dword [edx + 8], eax
mov dword [edx + 4], 0
mov eax, dword [ebp + 8]
mov eax, dword [eax + 0x4c]
test eax, eax
je 0x47975c
cmp dword [edx + 4], eax
jb 0x479727
push eax
mov eax, dword [ebp + 8]
push dword [eax + 0x50]
push dword [edx + 8]
call sym._memcmp
mov edx, dword [esp + 0xc]
add esp, 0xc
test eax, eax
je 0x47975c
cmp dword [edx], 0
mov dword [edx + 4], 0
mov ebx, dword [esp + 0x10]
je 0x47974c
mov dword [edx], 0
push dword [edx + 8]
call sym._free
mov edx, dword [esp + 4]
add esp, 4
mov eax, dword [0x5052b0]
mov dword [edx + 8], eax
dec dword [esi + 8]
jmp 0x479e62
test edi, edi
mov ebx, dword [esp + 0x10]
je 0x4797af
push edi
call sym._wcslen
add esp, 4
test eax, eax
je 0x4797c7
mov esi, eax
sub esp, 0x20
xorpd xmm0, xmm0
movupd xmmword [esp + 0x10], xmm0
mov dword [esp + 0xc], eax
mov dword [esp + 8], edi
mov dword [esp + 4], 0
mov dword [esp], 0xfde9
call dword [sym.imp.KERNEL32.dll_WideCharToMultiByte]
mov edi, eax
inc eax
mov ecx, dword [esp]
mov dword [ecx + 0x24], eax
jne 0x4797e2
mov eax, dword [0x5052b0]
jmp 0x4797f2
mov dword [edx + 0x24], 0
mov dword [edx + 0x28], 0
mov eax, dword [0x5052b0]
mov dword [edx + 0x2c], eax
jmp 0x479826
mov edx, dword [esp]
mov dword [edx + 0x24], 0
mov dword [edx + 0x28], 0
mov eax, dword [0x5052b0]
mov dword [edx + 0x2c], eax
jmp 0x479821
push eax
call sym._malloc
mov ecx, dword [esp + 4]
add esp, 4
mov byte [eax], 0
mov dword [ecx + 0x2c], eax
mov dword [ecx + 0x28], 0
push 0
push 0
push edi
push eax
push esi
push dword [esp + 0x1c]
push 0
push 0xfde9
call dword [sym.imp.KERNEL32.dll_WideCharToMultiByte]
mov edx, dword [esp]
mov dword [edx + 0x28], edi
mov eax, dword [edx + 0x2c]
mov byte [eax + edi], 0
mov eax, dword [0x5052b0]
mov dword [edx + 0x18], 0
mov dword [edx + 0x1c], 0
mov dword [edx + 0x20], eax
mov ecx, dword [esp + 0x164]
test ecx, ecx
je 0x4799d7
lea edi, [esp + ecx]
add edi, 0x14c
mov eax, dword [0x5052b0]
mov dword [edx + 0x20], eax
push edi
call sym._strlen
mov edx, dword [esp + 4]
add esp, 4
test eax, eax
je 0x4799d2
mov esi, eax
mov dword [esp + 8], edi
inc eax
mov ecx, 0x20
nop dword [eax + eax]
mov ebx, ecx
add ecx, ecx
cmp eax, ebx
ja 0x479880
push ebx
call sym._malloc
add esp, 4
mov byte [eax], 0
mov edi, dword [esp]
mov dword [edi + 0x20], eax
mov dword [edi + 0x18], ebx
push esi
push dword [esp + 0xc]
push eax
call sym._memcpy
mov edx, edi
add esp, 0xc
mov eax, dword [edi + 0x1c]
add eax, esi
mov dword [edi + 0x1c], eax
mov ecx, dword [edi + 0x20]
mov byte [ecx + eax], 0
mov eax, dword [edi + 0x1c]
test eax, eax
mov ebx, dword [esp + 0x10]
je 0x4799d2
mov edi, dword [edx + 0x20]
cmp byte [eax + edi - 1], 0x20
jne 0x47995d
inc eax
nop word [eax + eax]
mov ebx, eax
add eax, 0xfffffffe
mov dword [edx + 0x1c], eax
cmp ebx, 2
je 0x479947
lea eax, [ebx - 1]
cmp byte [edi + ebx - 3], 0x20
je 0x4798e0
cmp dword [edx + 0x18], 0
jne 0x47994d
lea ecx, [eax - 1]
mov dword [esp + 8], ecx
mov dword [edx + 0x1c], 0
mov ecx, 0x20
mov esi, ecx
add ecx, ecx
cmp eax, esi
ja 0x479910
push esi
call sym._malloc
add esp, 4
mov byte [eax], 0
mov ecx, dword [esp]
mov dword [ecx + 0x20], eax
mov dword [ecx + 0x18], esi
mov esi, dword [esp + 8]
push esi
push edi
push eax
mov edi, eax
call sym._memcpy
mov edx, dword [esp + 0xc]
add esp, 0xc
mov dword [edx + 0x1c], esi
jmp 0x47994d
cmp dword [edx + 0x18], 0
je 0x4799b8
mov byte [edi + ebx - 2], 0
mov eax, dword [edx + 0x1c]
test eax, eax
mov ebx, dword [esp + 0x10]
je 0x4799d2
mov ecx, dword [edx + 0x20]
xor esi, esi
nop word cs:[eax + eax]
cmp byte [ecx + esi], 0x20
jne 0x47997d
inc esi
cmp eax, esi
jne 0x479970
mov esi, eax
test esi, esi
je 0x4799d2
cmp dword [edx + 0x18], 0
je 0x4799ac
lea edx, [ecx + esi]
sub eax, esi
push eax
push edx
push ecx
call sym._memmove
mov edx, dword [esp + 0xc]
add esp, 0xc
mov eax, dword [edx + 0x1c]
mov ecx, dword [edx + 0x20]
sub eax, esi
mov dword [edx + 0x1c], eax
mov byte [ecx + eax], 0
jmp 0x4799d2
sub eax, esi
mov dword [edx + 0x1c], eax
add ecx, esi
mov dword [edx + 0x20], ecx
jmp 0x4799d2
mov dword [edx + 0x18], 0
mov dword [edx + 0x1c], 0
mov eax, dword [0x5052b0]
mov dword [edx + 0x20], eax
mov ebx, dword [esp + 0x10]
mov eax, dword [0x5052b0]
mov dword [edx + 0x30], 0
mov dword [edx + 0x34], 0
mov dword [edx + 0x38], eax
mov ecx, dword [esp + 0x160]
test ecx, ecx
je 0x479b87
lea edi, [esp + ecx]
add edi, 0x14c
mov eax, dword [0x5052b0]
mov dword [edx + 0x38], eax
push edi
call sym._strlen
mov edx, dword [esp + 4]
add esp, 4
test eax, eax
je 0x479b82
mov esi, eax
mov dword [esp + 8], edi
inc eax
mov ecx, 0x20
nop dword [eax]
mov ebx, ecx
add ecx, ecx
cmp eax, ebx
ja 0x479a30
push ebx
call sym._malloc
add esp, 4
mov byte [eax], 0
mov edi, dword [esp]
mov dword [edi + 0x38], eax
mov dword [edi + 0x30], ebx
push esi
push dword [esp + 0xc]
push eax
call sym._memcpy
mov edx, edi
add esp, 0xc
mov eax, dword [edi + 0x34]
add eax, esi
mov dword [edi + 0x34], eax
mov ecx, dword [edi + 0x38]
mov byte [ecx + eax], 0
mov eax, dword [edi + 0x34]
test eax, eax
mov ebx, dword [esp + 0x10]
je 0x479b82
mov edi, dword [edx + 0x38]
cmp byte [eax + edi - 1], 0x20
jne 0x479b0d
inc eax
nop word [eax + eax]
mov ebx, eax
add eax, 0xfffffffe
mov dword [edx + 0x34], eax
cmp ebx, 2
je 0x479af7
lea eax, [ebx - 1]
cmp byte [edi + ebx - 3], 0x20
je 0x479a90
cmp dword [edx + 0x30], 0
jne 0x479afd
lea ecx, [eax - 1]
mov dword [esp + 8], ecx
mov dword [edx + 0x34], 0
mov ecx, 0x20
mov esi, ecx
add ecx, ecx
cmp eax, esi
ja 0x479ac0
push esi
call sym._malloc
add esp, 4
mov byte [eax], 0
mov ecx, dword [esp]
mov dword [ecx + 0x38], eax
mov dword [ecx + 0x30], esi
mov esi, dword [esp + 8]
push esi
push edi
push eax
mov edi, eax
call sym._memcpy
mov edx, dword [esp + 0xc]
add esp, 0xc
mov dword [edx + 0x34], esi
jmp 0x479afd
cmp dword [edx + 0x30], 0
je 0x479b68
mov byte [edi + ebx - 2], 0
mov eax, dword [edx + 0x34]
test eax, eax
mov ebx, dword [esp + 0x10]
je 0x479b82
mov ecx, dword [edx + 0x38]
xor esi, esi
nop word cs:[eax + eax]
cmp byte [ecx + esi], 0x20
jne 0x479b2d
inc esi
cmp eax, esi
jne 0x479b20
mov esi, eax
test esi, esi
je 0x479b82
cmp dword [edx + 0x30], 0
je 0x479b5c
lea edx, [ecx + esi]
sub eax, esi
push eax
push edx
push ecx
call sym._memmove
mov edx, dword [esp + 0xc]
add esp, 0xc
mov eax, dword [edx + 0x34]
mov ecx, dword [edx + 0x38]
sub eax, esi
mov dword [edx + 0x34], eax
mov byte [ecx + eax], 0
jmp 0x479b82
sub eax, esi
mov dword [edx + 0x34], eax
add ecx, esi
mov dword [edx + 0x38], ecx
jmp 0x479b82
mov dword [edx + 0x30], 0
mov dword [edx + 0x34], 0
mov eax, dword [0x5052b0]
mov dword [edx + 0x38], eax
mov ebx, dword [esp + 0x10]
mov eax, dword [0x5052b0]
xor ecx, ecx
cmp byte [esp + 0x156], 0
setne cl
lea ecx, [ecx*4 + 4]
or dword [edx + 0x3c], ecx
lea ecx, [edx + 0xc]
mov dword [edx + 0xc], 0
mov dword [edx + 0x10], 0
mov dword [edx + 0x14], eax
mov eax, dword [esp + 0x168]
cmp eax, 0x13
ja case.default.0x479bbe
jmp dword [eax*4 + 0x4f98a4]
mov edx, 0x4f9820
jmp 0x479c66
push eax
push str.Unknown___d_
push ecx
call dbg.ffStrbufSetF
add esp, 0xc
jmp 0x479c6b
mov edx, str.SCSI
jmp 0x479c66
mov edx, str.ATAPI
jmp 0x479c66
mov edx, 0x4f9833
jmp 0x479c66
mov edx, str.1394
jmp 0x479c66
mov edx, 0x4f983c
jmp 0x479c66
mov edx, str.Fibre
jmp 0x479c66
mov edx, 0x4f9846
jmp 0x479c66
mov edx, str.RAID
jmp 0x479c66
mov edx, str.iSCSI
jmp 0x479c66
mov edx, 0x4f9855
jmp 0x479c66
mov edx, str.SATA
jmp 0x479c66
mov edx, 0x4f985e
jmp 0x479c66
mov edx, 0x4f9861
jmp 0x479c66
mov edx, str.Virtual
jmp 0x479c66
mov edx, str.File_Backed_Virtual
jmp 0x479c66
mov edx, str.Spaces
jmp 0x479c66
mov edx, str.NVMe
jmp 0x479c66
mov edx, 0x4f988d
jmp 0x479c66
mov edx, 0x4f9891
call dbg.ffStrbufSetStatic
lea ecx, [esp + 4]
mov dword [esp + 0x44], 0
mov dword [esp + 0x40], 0
mov dword [esp + 0x48], 0
mov dword [esp + 0x28], 7
mov dword [esp + 0x2c], 0
mov byte [esp + 0x30], 0
lea esi, [esp + 0x40]
lea eax, [esp + 0x28]
push 0
push ecx
push 0xc
push esi
push 0xc
push eax
push 0x2d1400
push ebx
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
je 0x479cd4
cmp dword [esp + 4], 0xc
jne 0x479cd4
xor eax, eax
cmp byte [esp + 0x48], 1
adc eax, 1
mov ecx, dword [esp]
or dword [ecx + 0x3c], eax
xorpd xmm0, xmm0
movapd xmmword [esp + 0x50], xmm0
movapd xmmword [esp + 0x40], xmm0
mov dword [esp + 0x64], 0
mov dword [esp + 0x60], 0
push 0
lea edi, [esp + 8]
push edi
push 0x28
push esi
push 0
push 0
push 0x700a0
push ebx
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
mov ecx, eax
test eax, eax
mov edi, esi
je 0x479d1e
mov eax, dword [esp + 0x5c]
mov ecx, dword [esp + 0x58]
mov esi, dword [esp]
mov dword [esi + 0x40], ecx
mov dword [esi + 0x44], eax
push 0x108
push 0
push edi
call sym._memset
add esp, 0xc
push 0
lea eax, [esp + 8]
push eax
push 0x108
push edi
push 0
push 0
push 0x2d0c04
push ebx
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
je 0x479dd6
cmp dword [esp + 0x44], 0
je 0x479dd6
cmp dword [esp + 0x40], 0x1f
jne 0x479d78
mov eax, dword [esp + 0x4c]
test al, 4
jne 0x479dd2
test al, 8
je 0x479dd6
or byte [esi + 0x3c], 0x10
jmp 0x479dd6
mov ecx, dword [esp + 0x64]
mov eax, 0x20
test cl, 4
jne 0x479d90
mov eax, 0x10
test cl, 8
je 0x479d93
or dword [esi + 0x3c], eax
mov eax, dword [esi + 0x40]
or eax, dword [esi + 0x44]
jne 0x479dd6
mov eax, dword [esp + 0x54]
mul dword [esp + 0x60]
mov ecx, edx
mov ebx, dword [esp + 0x58]
mul ebx
mov esi, edx
imul ecx, ebx
mov ebx, dword [esp + 0x10]
add esi, ecx
mov ecx, dword [esp + 0x5c]
imul esi, ecx
mul ecx
add edx, esi
mov ecx, dword [esp]
mov dword [ecx + 0x40], eax
mov eax, dword [esp]
mov dword [eax + 0x44], edx
mov esi, dword [esp]
jmp 0x479dd6
or byte [esi + 0x3c], 0x20
mov dword [esi + 0x4c], 0x7ff80000
mov dword [esi + 0x48], 0
mov eax, dword [ebp + 8]
cmp byte [eax + 0x54], 0
je 0x479e62
xorpd xmm0, xmm0
movapd xmmword [esp + 0x50], xmm0
movapd xmmword [esp + 0x40], xmm0
mov dword [esp + 0x64], 0
mov dword [esp + 0x60], 0
mov dword [esp + 0x1c], 0x34
mov dword [esp + 0x20], 0
mov byte [esp + 0x24], 0
lea eax, [esp + 0x1c]
push 0
lea ecx, [esp + 8]
push ecx
push 0x28
lea ecx, [esp + 0x4c]
push ecx
push 0xc
push eax
push 0x2d1400
push ebx
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
je 0x479e62
cmp dword [esp + 4], 0x28
jne 0x479e62
movsx eax, word [esp + 0x5a]
xorps xmm0, xmm0
cvtsi2sd xmm0, eax
mov eax, dword [esp]
movsd qword [eax + 0x48], xmm0
lea eax, [ebx + 1]
cmp eax, 2
jb 0x479e71
push ebx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
cmp ebx, 0xffffffff
setne al
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret