Function at 0x14003f540
Capabilities:
Write file on windows

Disassembly:
mov qword [rsp + 0x10], rdx
push rbp
push rbx
push rsi
push rdi
push r13
push r14
push r15
mov rbp, rsp
sub rsp, 0x60
mov qword [rbp - 0x18], 0xfffffffffffffffe
mov r14, rdx
mov r13, rcx
or qword [rbp + 0x58], 0xffffffffffffffff
xor ebx, ebx
mov qword [rbp - 0x20], rbx
and dword [rbp + 0x40], ebx
mov esi, 0x100000
and dword [rbp + 0x50], ebx
lea r8, str.CVdsRawDiskLun::CleanDiskThread__
lea edx, [rbx + 0x5e]
lea rcx, [rbp - 0x10]
call qword [sym.imp.vdsutil.dll_public:_void___cdecl_CVdsCallTracer::constructor_unsigned_long_int__char_const____ptr64____ptr64]
nop
lea r8, [rbp + 0x58]
mov edx, 0xc0000000
mov rcx, qword [r13 + 0xd8]
call qword [sym.imp.vdsutil.dll_OpenDevice]
mov edi, eax
test eax, eax
je 0x14003f5c5
mov r9d, eax
lea r8, str.CRawDiskLun::Clean__1__error_ld
xor edx, edx
lea ecx, [rbx + 0x5e]
call qword [sym.imp.vdsutil.dll_VdsTraceEx]
jmp 0x14003f795
cmp esi, 0x200
jb 0x14003f727
call qword [sym.imp.api_ms_win_core_heap_l1_1_0.dll_GetProcessHeap]
mov rcx, rax
mov r8d, esi
mov edx, 8
call qword [sym.imp.vdsutil.dll_VdsHeapAlloc]
mov rbx, rax
mov qword [rbp - 0x20], rax
test rax, rax
jne 0x14003f5f8
shr esi, 1
jmp 0x14003f5c5
xor edx, edx
mov eax, 0x100000
div esi
mov r14d, eax
mov r15d, eax
mov eax, 1
xor edi, edi
test r15d, r15d
je 0x14003f6a0
test eax, eax
je 0x14003f65c
and qword [rsp + 0x20], 0
lea r9, [rbp + 0x40]
mov r8d, esi
mov rdx, rbx
mov rcx, qword [rbp + 0x58]
call qword [sym.imp.api_ms_win_core_file_l1_1_0.dll_WriteFile]
test eax, eax
je 0x14003f652
mov eax, dword [rbp + 0x40]
add rdi, rax
xor r9d, r9d
xor r8d, r8d
mov rdx, rdi
mov rcx, qword [rbp + 0x58]
call qword [sym.imp.api_ms_win_core_file_l1_1_0.dll_SetFilePointerEx]
add r15d, 0xffffffff
jne 0x14003f617
test eax, eax
jne 0x14003f6a0
call qword [sym.imp.api_ms_win_core_errorhandling_l1_1_0.dll_GetLastError]
mov edi, eax
movzx esi, ax
or esi, 0x80070000
lea ecx, [r14 - 1]
mov r9d, eax
xor edx, edx
cmp r15d, ecx
lea ecx, [rdx + 0x5e]
lea r8, str.CRawDiskLun::Clean__3__error_ld
je 0x14003f68c
lea r8, str.CRawDiskLun::Clean__4__error_ld
call qword [sym.imp.vdsutil.dll_VdsTraceEx]
test edi, edi
cmovle esi, edi
mov r14, qword [rbp + 0x48]
jmp 0x14003f741
mov rdx, qword [r13 + 0xa0]
sub rdx, 0x100000
xor r9d, r9d
xor r8d, r8d
mov rcx, qword [rbp + 0x58]
call qword [sym.imp.api_ms_win_core_file_l1_1_0.dll_SetFilePointerEx]
test eax, eax
je 0x14003f6f0
mov eax, 1
test r14d, r14d
je 0x14003f720
test eax, eax
je 0x14003f6f0
and qword [rsp + 0x20], 0
lea r9, [rbp + 0x40]
mov r8d, esi
mov rdx, rbx
mov rcx, qword [rbp + 0x58]
call qword [sym.imp.api_ms_win_core_file_l1_1_0.dll_WriteFile]
add r14d, 0xffffffff
jne 0x14003f6cc
cmp eax, 1
je 0x14003f720
call qword [sym.imp.api_ms_win_core_errorhandling_l1_1_0.dll_GetLastError]
mov edi, eax
mov r9d, eax
lea r8, str.CRawDiskLun::CleanDiskThread__5__error_ld
xor edx, edx
lea ecx, [rdx + 0x5e]
call qword [sym.imp.vdsutil.dll_VdsTraceEx]
movzx esi, di
or esi, 0x80070000
jmp 0x14003f692
xor esi, esi
jmp 0x14003f697
mov esi, 0x8007000e
mov r9d, esi
lea r8, str.CRawDiskLun::Clean__2__hr_lX
xor edx, edx
lea ecx, [rdx + 0x5e]
call qword [sym.imp.vdsutil.dll_VdsTraceEx]
and qword [rsp + 0x38], 0
lea rax, [rbp + 0x50]
mov qword [rsp + 0x30], rax
and dword [rsp + 0x28], 0
and qword [rsp + 0x20], 0
xor r9d, r9d
xor r8d, r8d
mov edx, 0x70140
mov rcx, qword [rbp + 0x58]
call qword [sym.imp.api_ms_win_core_io_l1_1_0.dll_DeviceIoControl]
test eax, eax
jne 0x14003f7a3
call qword [sym.imp.api_ms_win_core_errorhandling_l1_1_0.dll_GetLastError]
mov edi, eax
mov r9d, eax
lea r8, str.CRawDiskLun::CleanDiskThread__6___ld
xor edx, edx
lea ecx, [rdx + 0x5e]
call qword [sym.imp.vdsutil.dll_VdsTraceEx]
test esi, esi
jne 0x14003f7a3
movzx esi, di
or esi, 0x80070000
test edi, edi
cmovle esi, edi
mov r8d, esi
sar r8d, 0x1f
and r8d, 0xffffff9c
add r8d, 0x64
mov edx, esi
mov rcx, qword [r14 + 8]
call qword [sym.imp.vdsutil.dll_public:_void___cdecl_CVdsAsyncObjectBase::SetCompletionStatus_long_int__unsigned_long_int____ptr64]
mov rcx, qword [r14 + 8]
call qword [sym.imp.vdsutil.dll_public:_void___cdecl_CVdsAsyncObjectBase::Signal_void____ptr64]
mov rcx, qword [r14 + 8]
mov rax, qword [rcx]
mov rax, qword [rax + 0x10]
call qword [0x140051cb8]
nop
lea rcx, [rbp - 0x10]
call qword [sym.imp.vdsutil.dll_public:_void___cdecl_CVdsCallTracer::destructor_void____ptr64]
nop
test rbx, rbx
je 0x14003f803
call qword [sym.imp.api_ms_win_core_heap_l1_1_0.dll_GetProcessHeap]
mov rcx, rax
mov r8, rbx
xor edx, edx
call qword [sym.imp.vdsutil.dll_VdsHeapFree]
and qword [rbp - 0x20], 0
mov rcx, qword [rbp + 0x58]
lea rax, [rcx - 1]
cmp rax, 0xfffffffffffffffd
ja 0x14003f81c
call qword [sym.imp.api_ms_win_core_handle_l1_1_0.dll_CloseHandle]
or qword [rbp + 0x58], 0xffffffffffffffff
xor eax, eax
add rsp, 0x60
pop r15
pop r14
pop r13
pop rdi
pop rsi
pop rbx
pop rbp
ret