MiMapProcessExecutable

INT64 __fastcall MiMapProcessExecutable(ULONG_PTR a1, _DWORD *a2, unsigned int *a3){
  int v3; 
  unsigned int v7; 
  __int64 v8; 
  NTSTATUS v9; 
  INT64 v10; 
  int v11; 
  unsigned int v12; 
  int v13; 
  int v14; 
  int v15; 
  INT64 result; 
  INT64 v17; 
  char v18; 
  INT64 v19; 
  INT64 v20; 
  INT64 v21; 
  INT64 v22; 
  INT64 v23; 
  INT64 v24; 
  INT64 v25; 
  UINT64 v26[2]; 
  __int128 v27; 
  INT64 v28; 
  INT64 v29; 
  v3 = a2[14];
  *(_OWORD *)v26 = 0i64;
  v27 = 0i64;
  if( (v3 & 0x20) == 0 )
    return 3221225545i64;
  if( (*a3 & 0x80u) == 0 || (result = MiSessionCreate(a1), (int)result >= 0) )
  {
    LODWORD(v22) = 0;
    v7 = *a3;
    v29 = 0i64;
    v28 = 0i64;
    v8 = 4i64;
    v23 = 0i64;
    LODWORD(v21) = 1;
    LODWORD(v20) = 4;
    LODWORD(v19) = (v7 & 0x10) << 25;
    v24 = 5i64;
    v25 = 32i64;
    v9 = MmMapViewOfSectionEx(a2, a1, &v28, (INT64)&v23, (INT64)&v29, v19, v20, (INT64)&v24, v21, v22, 0i64);
    v10 = v28;
    v11 = v9;
    *(_QWORD *)(a1 + 1312) = v28;
    if( v9 >= 0 )
    {
      v12 = *a3;
      v13 = 0;
      if( (*a3 & 0x10) != 0 )
      {
        MiFillPteHierarchy(v10, v26);
        do
        {
          v17 = v26[--v8];
          v18 = MI_READ_PTE_LOCK_FREE(v17);
          if( (v18 & 1) == 0 )
            break;
          if( v18 < 0 )
          {
            v13 = 1;
            break;
          }
        }
        while( v8 != 1 );
        if( v13 )
          v13 = (v12 & 0x20) != 0 ? v13 : 0;
        else
          *a3 = v12 & 0xFFFFFFEF;
      }
      v14 = PsMapSystemDlls(a1, v13);
      if( v14 < 0 )
        v11 = v14;
      if( v11 >= 0 )
      {
        v15 = MiCfgInitializeProcess(a1);
        if( v15 < 0 )
          return(unsigned int)v15;
      }
    }
    return(unsigned int)v11;
  }
  return result;
}

Referenced by:

MmInitializeProcessAddressSpace