MiUnapplyDriverHotPatch
INT64 __fastcall MiUnapplyDriverHotPatch(INT64 a1, INT64 rdx0){
unsigned int v2;
INT64 v5;
void *v6;
int v7;
void *v8;
INT64 v10[2];
char v11[12];
int v12;
__int64 v13;
__int64 v14;
__int64 v15;
__int64 v16;
int a2;
v2 = *(_DWORD *)(a1 + 64);
a2 = 0;
*(_QWORD *)&v11[4] = 0i64;
v12 = 0;
v14 = 0i64;
v16 = 0i64;
v10[0] = a1;
v5 = *(_QWORD *)(a1 + 48);
v10[1] = 0i64;
v13 = 0i64;
v6 = 0i64;
v15 = 0i64;
*(_QWORD *)v11 = (v2 >> 12) + ((v2 & 0xFFF) != 0);
v7 = VslDetermineHotPatchUndoTableSize(v5, &a2);
if( v7 >= 0 )
{
v7 = a2;
if( a2 )
{
LODWORD(v8) = MiAllocatePool((struct _SLIST_ENTRY *)0x100);
v6 = v8;
if( v8 )
{
v7 = VslObtainHotPatchUndoTable(*(PVOID *)(a1 + 48));
if( v7 >= 0 )
{
v7 = MiPrepareDriverPatchState((INT64)v10);
if( v7 >= 0 )
{
v7 = MiLockHotPatchUndoPages(v10, (INT64)v6);
if( v7 >= 0 )
v7 = VslRevertHotPatch(*(_QWORD *)(a1 + 48), 0i64, 0i64);
}
}
}
else
{
v7 = -1073741670;
}
}
}
MiUnlockDriverPages((UINT64 *)v10);
if( v6 )
ExFreePoolWithTag(v6, 0);
if( v7 >= 0 )
*(_QWORD *)(rdx0 + 120) = 0i64;
return(unsigned int)v7;
}Referenced by:
MiApplyHotPatchToDriver