MmRegisterHotPatch
NTSTATUS __stdcall MmRegisterHotPatch(PCUNICODE_STRING SourceString){
unsigned int v1;
unsigned int v2;
unsigned int v3;
unsigned int v4;
int v6;
int HotPatch;
_ETHREAD *Lock;
CHAR *HotPatchRecord;
unsigned int v11;
unsigned int v12;
INT64 a3;
v12 = v2;
v11 = v1;
LODWORD(a3) = 0;
v3 = v2;
v4 = v1;
v6 = 1;
if( (MiFlags & 0x8000) != 0 )
{
HotPatch = VslDetermineHotPatchType(v1, v2, &a3);
if( HotPatch < 0 )
{
LABEL_12:
MiLogHotPatchOperationStatus(v4, v3, (__int128 *)SourceString, HotPatch, 1);
return HotPatch;
}
if( (a3 & 2) != 0 )
return MiLoadHotPatch(SourceString);
}
Lock = MmAcquireLoadLock();
HotPatchRecord = MiAllocateHotPatchRecord(v4, v3, (UINT8 **)SourceString);
if( HotPatchRecord )
{
MiInsertHotPatchRecord(&MiGlobalHotPatchList, (RTL_BALANCED_NODE *)HotPatchRecord, 0i64);
v6 = 0;
if( (MiFlags & 0x8000) == 0
|| (int)MiApplyHotPatchToDriver(v4, v3, (UNICODE_STRING *)SourceString, 0i64) < 0
|| (v3 = v12, HotPatch = MiLoadHotPatch(SourceString), v4 = v11, HotPatch >= 0) )
{
HotPatch = 0;
}
}
else
{
HotPatch = -1073741670;
}
MmReleaseLoadLock(Lock);
if( v6 )
goto LABEL_12;
return HotPatch;
}Referenced by:
IopLoadBootHotPatches