MiApplyImageHotPatch

__int64 __fastcall MiApplyImageHotPatch(__int64 a1, __int64 a2, __int64 a3, INT64 a4, INT64 a5){
  INT64 v6; 
  VOID *v7; 
  int v8; 
  int v9; 
  VOID *v10; 
  _MDL *Mdl; 
  INT64 v12; 
  INT64 v13; 
  INT64 v15; 
  UINT64 Priority; 
  INT64 v17; 
  INT64 v18; 
  INT64 v19; 
  INT64 v20; 
  INT64 v21; 
  INT64 v22; 
  __int64 v23[4]; 
  VOID *v24; 
  INT64 v25; 

  v6 = 0i64;
  v7 = 0i64;
  v8 = 0;
  v9 = 0;
  v23[0] = a1;
  v23[1] = a2;
  v23[2] = a4;
  v23[3] = a5;
  v25 = *(unsigned int *)(a3 + 32);
  v10 = *(VOID **)(a3 + 40);
  v24 = v10;
  if( (*(_DWORD *)(a1 + 136) & 1) != 0 )
  {
    if( v10 )
    {
      Mdl = IoAllocateMdl(v10, (unsigned int)(6 * **(_DWORD **)(a1 + 40)), 0, 0, 0i64);
      v6 = (INT64)Mdl;
      if( !Mdl
        || ((MmProbeAndLockPages(Mdl, 0, IoWriteAccess), v9 = 1, (*(_BYTE *)(v6 + 10) & 5) == 0) ? (LODWORD(Priority) = 1073741856,
                                                                                                    LODWORD(v15) = 0,
                                                                                                    v7 = MmMapLockedPagesSpecifyCache((_MDL *)v6, 0, MmCached, 0i64, v15, Priority)) : (v7 = *(VOID **)(v6 + 24)),
            !v7) )
      {
        HIDWORD(v25) = -1073741670;
        goto LABEL_15;
      }
      v24 = v7;
    }
    if( (MiFlags & 4) == 0 )
      MiLockPagableImageSection(ExPageLockHandle, 1u);
    v8 = 1;
    KeGenericCallDpc((__int64)MiApplyImageHotPatchDpc, (__int64)v23);
  }
  else
  {
    LODWORD(v19) = 1;
    LODWORD(v18) = 0;
    HIDWORD(v25) = RtlApplyHotPatch(
                     *(_QWORD *)(a1 + 72),
                     *(_QWORD *)(a1 + 8),
                     *(_QWORD *)(a1 + 80),
                     *(unsigned int *)(a1 + 36),
                     (INT64)&v25,
                     Priority,
                     v17,
                     *(_QWORD *)(a2 + 72),
                     *(_QWORD *)(a2 + 8),
                     0i64,
                     v18,
                     0i64,
                     a4,
                     a5,
                     v19,
                     *(PRTL_BITMAP *)(a1 + 40),
                     (INT64)v10,
                     0i64,
                     v20,
                     v21,
                     v22);
  }
  *(_DWORD *)(a3 + 32) = v25;
LABEL_15:
  if( v7 )
    MmUnmapLockedPages(v7, (_MDL *)v6);
  if( v6 )
  {
    if( v9 )
      MmUnlockPages(v6, v12, v13);
    IoFreeMdl((PMDL)v6);
  }
  if( v8 && (MiFlags & 4) == 0 )
    MmUnlockPagableImageSection(ExPageLockHandle);
  return HIDWORD(v25);
}

Referenced by:

MiPerformImageHotPatch