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