Function at 0x4015c0
Capabilities:
Check os version

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
mov eax, 0x1218
call fcn.00407890
mov eax, dword [0x40b040]
xor eax, esp
mov dword [esp + 0x1214], eax
push esi
push edi
push 0x90
xor edi, edi
lea eax, [esp + 0x78]
mov esi, ecx
push edi
push eax
mov dword [esp + 0x28], esi
call sub.VCRUNTIME140.dll_memset
add esp, 0xc
mov dword [esp + 0x70], 0x94
lea eax, [esp + 0x70]
push eax
call dword [sym.imp.KERNEL32.dll_GetVersionExA]
cmp dword [esp + 0x80], 2
jne 0x401a31
push dword [esi]
lea eax, [esp + 0x111c]
push str..PhysicalDrive_d
push eax
call fcn.00401090
add esp, 0xc
lea eax, [esp + 0x1118]
push edi
push edi
push 3
push edi
push 3
push 0xc0000000
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileA]
mov dword [esp + 0x14], eax
cmp eax, 0xffffffff
je 0x40176d
push edi
lea ecx, [esp + 0x14]
mov dword [esp + 0x14], edi
push ecx
push 0x18
lea ecx, [esp + 0x2c]
xorps xmm0, xmm0
push ecx
push edi
push edi
push 0x74080
push eax
movaps xmmword [esp + 0x40], xmm0
movq qword [esp + 0x50], xmm0
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
je 0x401763
mov al, byte [esp + 0x23]
mov byte [esp + 0xf], al
test al, al
je 0x401763
push 0x210
xorps xmm0, xmm0
mov byte [esp + 0x5b], 0
lea eax, [esp + 0x10c]
movlpd qword [esp + 0x5d], xmm0
push edi
push eax
movlpd qword [esp + 0x6d], xmm0
mov dword [esp + 0x75], edi
call sub.VCRUNTIME140.dll_memset
mov cl, byte [esi]
add esp, 0xc
mov al, cl
mov dword [esp + 0x50], 0x10100
and al, 1
mov byte [esp + 0x54], 0
or al, 0xfa
mov byte [esp + 0x58], cl
shl al, 4
mov byte [esp + 0x55], al
mov al, byte [esp + 0xf]
shr al, cl
and al, 0x10
mov dword [esp + 0x4c], 0x200
neg al
push edi
sbb al, al
and al, 0xb5
add al, 0xec
mov byte [esp + 0x5a], al
lea eax, [esp + 0x14]
push eax
push 0x210
lea eax, [esp + 0x114]
push eax
push 0x20
lea eax, [esp + 0x60]
push eax
push 0x7c088
push dword [esp + 0x30]
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
je 0x401763
xor ecx, ecx
lea edx, [esi + 4]
nop dword [eax + eax]
movzx eax, word [esp + ecx*2 + 0x118]
lea edx, [edx + 4]
inc ecx
mov dword [edx - 4], eax
cmp ecx, 0x100
jl 0x401740
mov ecx, esi
call fcn.004010b0
mov edi, 1
push dword [esp + 0x14]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
test edi, edi
jne 0x401b7f
mov dword [esp + 0x10], edi
nop dword [eax]
mov ecx, 0x36
xor edx, edx
mov al, byte [edx + 0x408350]
xor al, cl
inc ecx
mov byte [esp + edx + 0x20], al
and ecx, 0x800000ff
jns 0x4017a4
dec ecx
or ecx, 0xffffff00
inc ecx
inc edx
cmp edx, 0xb
jl 0x401787
push dword [esp + 0x10]
lea eax, [esp + 0x24]
mov byte [esp + 0x2f], 0
push eax
lea eax, [esp + 0x1120]
push eax
call fcn.00401090
add esp, 0xc
mov dword [esp + 0x28], 0
lea eax, [esp + 0x1118]
xorps xmm0, xmm0
movq qword [esp + 0x20], xmm0
push 0
push 0
push 3
push 0
push 3
push 0xc0000000
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileA]
mov dword [esp + 8], eax
cmp eax, 0xffffffff
je 0x4018fe
mov dword [esp + 0x14], 0
nop dword [eax + eax]
push 0x22d
lea eax, [esp + 0x10c]
push 0
push eax
call sub.VCRUNTIME140.dll_memset
add esp, 0xc
mov dword [esp + 0x108], 0x1c
lea eax, [esp + 0x10c]
mov dword [esp + 0x114], 0x2710
mov dword [esp + 0x120], 0x211
mov dword [esp + 0x118], 0x1b0501
push 8
push str.SCSIDISK
push eax
call dword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_strncpy]
mov eax, dword [esp + 0x20]
add esp, 0xc
mov byte [esp + 0x130], al
lea eax, [esp + 0x1c]
mov byte [esp + 0x12e], 0xec
push 0
push eax
push 0x22d
lea eax, [esp + 0x114]
push eax
push 0x3c
push eax
push 0x4d008
push dword [esp + 0x24]
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
je 0x4018e2
cmp byte [esp + 0x16a], 0
je 0x4018e2
xor eax, eax
lea edx, [esi + 4]
nop word [eax + eax]
movzx ecx, word [esp + eax*2 + 0x134]
lea edx, [edx + 4]
inc eax
mov dword [edx - 4], ecx
cmp eax, 0x100
jl 0x4018c0
mov ecx, esi
call fcn.004010b0
mov edi, 1
mov eax, dword [esp + 0x14]
inc eax
mov dword [esp + 0x14], eax
cmp eax, 2
jl 0x401810
push dword [esp + 8]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov eax, dword [esp + 0x10]
inc eax
mov dword [esp + 0x10], eax
cmp eax, 0x10
jl 0x401780
test edi, edi
jne 0x401b7f
mov ecx, esi
call fcn.004012d0
test eax, eax
jne 0x401b81
push dword [esi]
mov dword [esp + 0x14], eax
lea eax, [esp + 0x111c]
push str..PhysicalDrive_d
push eax
call fcn.00401090
add esp, 0xc
lea eax, [esp + 0x1118]
push edi
push edi
push 3
push edi
push 7
push 0xc0000000
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileA]
mov dword [esp + 8], eax
cmp eax, 0xffffffff
je 0x401a19
push edi
lea ecx, [esp + 0x18]
mov dword [esp + 0x18], edi
push ecx
push 0x18
lea ecx, [esp + 0x2c]
xorps xmm0, xmm0
push ecx
push edi
push edi
push 0x74080
push eax
movaps xmmword [esp + 0x40], xmm0
movq qword [esp + 0x50], xmm0
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
je 0x401a19
push 0x221
call dword [sym.imp.api_ms_win_crt_heap_l1_1_0.dll_malloc]
add esp, 4
mov edi, eax
lea eax, [esp + 0x18]
push 0
push eax
push 0x221
push edi
push 0x21
push edi
push 0x7c088
push dword [esp + 0x24]
mov byte [edi + 0xa], 0xec
mov dword [esp + 0x38], 0
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
je 0x401a05
xor ecx, ecx
lea edx, [esi + 4]
movzx eax, word [edi + ecx*2 + 0x10]
lea edx, [edx + 4]
inc ecx
mov dword [edx - 4], eax
cmp ecx, 0x100
jl 0x4019e2
mov ecx, esi
call fcn.004010b0
mov dword [esp + 0x10], 1
push dword [esp + 8]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
push edi
call dword [sym.imp.api_ms_win_crt_heap_l1_1_0.dll_free]
add esp, 4
mov eax, dword [esp + 0x10]
pop edi
pop esi
mov ecx, dword [esp + 0x1214]
xor ecx, esp
call fcn.004069b7
mov esp, ebp
pop ebp
ret
mov dword [esp + 0x14], edi
test edi, edi
jne 0x401b7f
push 0x100
mov dword [esp + 0x14], edi
mov dword [esp + 0x1c], edi
call dword [sym.imp.KERNEL32.dll_GetCurrentProcess]
push eax
call dword [sym.imp.KERNEL32.dll_SetPriorityClass]
push 0x100c
lea eax, [esp + 0x10c]
push edi
push eax
call sub.VCRUNTIME140.dll_memset
add esp, 0xc
mov ecx, 0x6a
xor edx, edx
mov al, byte [edx + str.67B15CCADDX__]
xor al, cl
inc ecx
mov byte [esp + edx + 0x20], al
and ecx, 0x800000ff
jns 0x401a91
dec ecx
or ecx, 0xffffff00
inc ecx
inc edx
cmp edx, 0x10
jl 0x401a74
push 0
push 0x4000000
push 0
push 0
push 0
push 0
lea eax, [esp + 0x38]
mov byte [esp + 0x48], 0
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileA]
mov dword [esp + 8], eax
xorps xmm0, xmm0
movaps xmmword [esp + 0x20], xmm0
mov byte [esp + 0x30], 0
cmp eax, 0xffffffff
je 0x401af6
push 0
lea ecx, [esp + 0x1c]
push ecx
push 4
lea ecx, [esp + 0x114]
push ecx
push 0
push 0
push 1
push eax
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
push dword [esp + 8]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
jmp 0x401b5e
lea edx, [esp + 0x114]
xor edi, edi
mov dword [esp + 8], edx
cmp byte [esp + edi + 0x10c], 0
je 0x401b4a
mov eax, edi
shr eax, 1
cmp byte [esp + eax + 0x108], 0
je 0x401b4a
lea ecx, [esi + 4]
mov esi, 0x100
movzx eax, word [edx]
lea edx, [edx + 2]
mov dword [ecx], eax
lea ecx, [ecx + 4]
sub esi, 1
jne 0x401b23
mov esi, dword [esp + 0x1c]
mov ecx, esi
call fcn.004010b0
mov edx, dword [esp + 8]
mov dword [esp + 0x10], 1
inc edi
add edx, 0x200
mov dword [esp + 8], edx
cmp edi, 8
jb 0x401b03
mov edi, dword [esp + 0x10]
push 0x20
call dword [sym.imp.KERNEL32.dll_GetCurrentProcess]
push eax
call dword [sym.imp.KERNEL32.dll_SetPriorityClass]
mov eax, dword [esp + 0x14]
inc eax
mov dword [esp + 0x14], eax
cmp eax, 0xa
jl 0x401a35
mov eax, edi
mov ecx, dword [esp + 0x121c]
pop edi
pop esi
xor ecx, esp
call fcn.004069b7
mov esp, ebp
pop ebp
ret