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