MiApplyImageHotPatch

INT64 __fastcall MiApplyImageHotPatch(INT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
  _MDL *v6; 
  PVOID MappedSystemVa; 
  int v8; 
  int v9; 
  void *a17; 
  _MDL *Mdl; 
  INT64 v12; 
  char Priority[8]; 
  INT64 v15; 
  INT64 v16; 
  INT64 a15; 
  INT64 v18; 
  INT64 v19; 
  INT64 v20; 
  __int64 Context[4]; 
  PVOID v22; 
  INT64 v23; 
  v6 = 0i64;
  MappedSystemVa = 0i64;
  v8 = 0;
  v9 = 0;
  Context[0] = a1;
  Context[1] = a2;
  Context[2] = a4;
  Context[3] = a5;
  v23 = *(unsigned int *)(a3 + 32);
  a17 = *(void **)(a3 + 40);
  v22 = a17;
  if( (*(_DWORD *)(a1 + 136) & 1) != 0 )
  {
    if( a17 )
    {
      Mdl = IoAllocateMdl(a17, 6 * **(_DWORD **)(a1 + 40), 0, 0, 0i64);
      v6 = Mdl;
      if( !Mdl
        || ((MmProbeAndLockPages(Mdl, 0, IoWriteAccess), v9 = 1, (v6->MdlFlags & 5) == 0) ? (MappedSystemVa = MmMapLockedPagesSpecifyCache(v6, 0, MmCached, 0i64, 0, 0x40000020u)) : (MappedSystemVa = v6->MappedSystemVa),
            !MappedSystemVa) )
      {
        HIDWORD(v23) = -1073741670;
        goto LABEL_15;
      }
      v22 = MappedSystemVa;
    }
    if( (MiFlags & 4) == 0 )
      MiLockPagableImageSection(ExPageLockHandle, 1ui64);
    v8 = 1;
    KeGenericCallDpc((PKDEFERRED_ROUTINE)MiApplyImageHotPatchDpc, Context);
  }
  else
  {
    LODWORD(a15) = 1;
    LODWORD(v16) = 0;
    HIDWORD(v23) = RtlApplyHotPatch(
                     *(_QWORD *)(a1 + 72),
                     *(_QWORD *)(a1 + 8),
                     *(_QWORD *)(a1 + 80),
                     *(unsigned int *)(a1 + 36),
                     (INT64)&v23,
                     *(INT64 *)Priority,
                     v15,
                     *(_QWORD *)(a2 + 72),
                     *(_QWORD *)(a2 + 8),
                     0i64,
                     v16,
                     0i64,
                     a4,
                     a5,
                     a15,
                     *(RTL_BITMAP **)(a1 + 40),
                     (INT64)a17,
                     0i64,
                     v18,
                     v19,
                     v20);
  }
  *(_DWORD *)(a3 + 32) = v23;
LABEL_15:
  if( MappedSystemVa )
    MmUnmapLockedPages(MappedSystemVa, v6);
  if( v6 )
  {
    if( v9 )
      MmUnlockPages(v6);
    IoFreeMdl(v6);
  }
  if( v8 && (MiFlags & 4) == 0 )
    MmUnlockPagableImageSection(ExPageLockHandle, v12);
  return HIDWORD(v23);
}

Referenced by:

MiPerformImageHotPatch