WbMakeUserDataPagesKernelWritable
__int64 __fastcall WbMakeUserDataPagesKernelWritable(VOID *VirtualAddress, UINT64 Length, _MDL **a3, _QWORD *a4){
unsigned int v6;
INT64 v8;
int v9;
INT64 v10;
NTSTATUS v11;
INT64 v12;
_MDL *Mdl;
VOID *v14;
UINT64 v16;
UINT64 Priority;
VOID *v18[3];
UINT64 v19;
UINT64 v20;
v6 = Length;
v8 = 0i64;
v9 = 0;
LODWORD(v20) = 0;
v18[0] = VirtualAddress;
v19 = (unsigned int)Length;
v11 = ZwProtectVirtualMemory((VOID *)0xFFFFFFFFFFFFFFFFi64, v18, &v19, 4ui64, &v20);
if( v11 >= 0 )
{
Mdl = IoAllocateMdl(VirtualAddress, v6, 0, 0, 0i64);
v8 = (INT64)Mdl;
if( Mdl )
{
v9 = 1;
LOBYTE(v10) = 1;
MmProbeAndLockPages(Mdl, v10, IoModifyAccess);
if( (*(_BYTE *)(v8 + 10) & 5) != 0 )
{
v14 = *(VOID **)(v8 + 24);
}
else
{
LODWORD(Priority) = 1073741856;
LODWORD(v16) = 0;
v14 = MmMapLockedPagesSpecifyCache((_MDL *)v8, 0, MmCached, 0i64, v16, Priority);
}
v18[1] = v14;
if( v14 )
{
if( a4 )
*a4 = v14;
if( a3 )
{
*a3 = (_MDL *)v8;
v8 = 0i64;
}
}
else
{
v11 = -1073741801;
}
}
else
{
v11 = -1073741801;
}
}
if( v8 )
{
if( v9 )
MmUnlockPages(v8, v10, v12);
IoFreeMdl((PMDL)v8);
}
return(unsigned int)v11;
}Referenced by:
sub_1405D28BC