WbMakeUserDataPagesKernelWritable
NTSTATUS __stdcall WbMakeUserDataPagesKernelWritable(PVOID VirtualAddress, UINT32 a2){
_MDL **v2;
_QWORD *v3;
_QWORD *v4;
_MDL **v5;
_MDL *v8;
int v9;
int v10;
_MDL *Mdl;
PVOID MappedSystemVa;
PVOID v14[3];
UINT64 v15;
UINT64 v16;
v4 = v3;
v5 = v2;
v8 = 0i64;
v9 = 0;
LODWORD(v16) = 0;
v14[0] = VirtualAddress;
v15 = a2;
v10 = ZwProtectVirtualMemory((PVOID)0xFFFFFFFFFFFFFFFFi64, v14, &v15, 4ui64, &v16);
if( v10 >= 0 )
{
Mdl = IoAllocateMdl(VirtualAddress, a2, 0, 0, 0i64);
v8 = Mdl;
if( Mdl )
{
v9 = 1;
MmProbeAndLockPages(Mdl, 1, IoModifyAccess);
if( (v8->MdlFlags & 5) != 0 )
MappedSystemVa = v8->MappedSystemVa;
else
MappedSystemVa = MmMapLockedPagesSpecifyCache(v8, 0, MmCached, 0i64, 0, 0x40000020u);
v14[1] = MappedSystemVa;
if( MappedSystemVa )
{
if( v4 )
*v4 = MappedSystemVa;
if( v5 )
{
*v5 = v8;
v8 = 0i64;
}
}
else
{
v10 = -1073741801;
}
}
else
{
v10 = -1073741801;
}
}
if( v8 )
{
if( v9 )
MmUnlockPages(v8);
IoFreeMdl(v8);
}
return v10;
}Referenced by:
sub_1405D28BC