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