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