WbMakeUserExecutablePagesKernelWritable

NTSTATUS __stdcall WbMakeUserExecutablePagesKernelWritable(VOID *a1, UINT64 a2, _MDL **a3, UINT64 *a4){
  int v6; 
  NTSTATUS v7; 
  _MDL *Mdl; 
  INT64 v9; 
  INT64 v10; 
  INT64 v11; 
  VOID *v12; 
  UINT64 v14; 
  UINT64 Priority; 

  v6 = 0;
  v7 = 0;
  Mdl = IoAllocateMdl(a1, a2, 0, 0, 0i64);
  v11 = (INT64)Mdl;
  if( Mdl )
  {
    MmProbeAndLockPagesPrivate((INT64)Mdl);
    v6 = 1;
    if( (*(_BYTE *)(v11 + 10) & 5) != 0 )
    {
      v12 = *(VOID **)(v11 + 24);
    }
    else
    {
      LODWORD(Priority) = 1073741856;
      LODWORD(v14) = 0;
      v12 = MmMapLockedPagesSpecifyCache((_MDL *)v11, 0, MmCached, 0i64, v14, Priority);
    }
    if( v12 )
    {
      if( a4 )
        *a4 = (UINT64)v12;
      if( a3 )
      {
        *a3 = (_MDL *)v11;
        v11 = 0i64;
      }
    }
    else
    {
      v7 = -1073741801;
    }
  }
  else
  {
    v7 = -1073741801;
  }
  if( v11 )
  {
    if( v6 )
      MmUnlockPages(v11, v9, v10);
    IoFreeMdl((PMDL)v11);
  }
  return v7;
}

Referenced by:

WbAllocateMemoryBlock
sub_1405D28BC