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;
_RTL_BALANCED_NODE *HotPatchRecord;
INT64 v11;
unsigned int v12;
unsigned int v13;
int v14;
v13 = v2;
v12 = v1;
v14 = 0;
v3 = v2;
v4 = v1;
v6 = 1;
if( (MiFlags & 0x8000) != 0 )
{
HotPatch = VslDetermineHotPatchType(v1, v2, &v14);
if( HotPatch < 0 )
{
LABEL_12:
LODWORD(v11) = 1;
MiLogHotPatchOperationStatus(
v4,
v3,
(PFN_WDFCX_DEVICE_POST_SELF_MANAGED_IO_INIT *)SourceString,
(unsigned int)HotPatch,
v11);
return HotPatch;
}
if( (v14 & 2) != 0 )
return MiLoadHotPatch(SourceString);
}
Lock = MmAcquireLoadLock((INT64)SourceString, v1);
HotPatchRecord = (_RTL_BALANCED_NODE *)MiAllocateHotPatchRecord(v4, v3, (const VOID **)SourceString);
if( HotPatchRecord )
{
MiInsertHotPatchRecord((_RTL_BALANCED_NODE **)&MiGlobalHotPatchList, HotPatchRecord, 0i64);
v6 = 0;
if( (MiFlags & 0x8000) == 0
|| MiApplyHotPatchToDriver(v4, v3, (_UNICODE_STRING *)SourceString, 0i64) < 0
|| (v3 = v13, HotPatch = MiLoadHotPatch(SourceString), v4 = v12, HotPatch >= 0) )
{
HotPatch = 0;
}
}
else
{
HotPatch = -1073741670;
}
MmReleaseLoadLock(Lock);
if( v6 )
goto LABEL_12;
return HotPatch;
}Referenced by:
IopLoadBootHotPatches