MiPrepareDriverForHotPatch
NTSTATUS __fastcall MiPrepareDriverForHotPatch(INT64 *a1, INT64 *a2, _DWORD *a3, INT64 a4){
int *v7;
unsigned int i;
INT64 v9;
INT64 *v10;
NTSTATUS result;
INT64 *v12;
int v13;
INT64 v14;
v7 = (_DWORD *)((char *)a3 + *(unsigned int *)(a1[1] + 24));
for( i = RtlGetHotPatchSize(a3); ; v7 = (int *)(v9 + 4i64 * (v13 & 0xFFF) * i) )
{
v13 = *v7;
if( !*v7 )
break;
v9 = (INT64)(v7 + 1);
v10 = a1;
if( v13 < 0 )
v10 = a2;
LODWORD(v14) = v13;
result = MiLockHotPatchPages(v10, v9, v13 & 0xFFF, i, v14);
if( result < 0 )
return result;
if( (v13 & 0xFC000) == 376832 )
{
v12 = a2;
LODWORD(v14) = v13;
if( v13 < 0 )
v12 = a1;
result = MiLockHotPatchPages(v12, v9, v13 & 0xFFF, i, v14);
if( result < 0 )
return result;
}
}
if( !a4 )
return 0;
result = MiLockHotPatchUndoPages(a1, a4);
if( result >= 0 )
return 0;
return result;
}Referenced by:
MiApplyDriverHotPatch