MiFindProcessImageHotPatchRecord
VOID __fastcall MiFindProcessImageHotPatchRecord(){
unsigned int v0;
_EPROCESS *v1;
unsigned int v2;
_UNICODE_STRING *v3;
unsigned int v4;
unsigned int v5;
_EPROCESS *v6;
_UNICODE_STRING *StringOut;
_ETHREAD *CurrentThread;
struct _DMA_ADAPTER *v9;
_QWORD *UserSidHotPatchContext;
UINT8 result[80];
INT64 a6;
v4 = v0;
v5 = v2;
v6 = v1;
StringOut = v3;
memset((INT64)result, 0i64);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v9 = 0i64;
--*((_WORD *)CurrentThread + 243);
ExAcquirePushLockSharedEx((UINT64)&MiHotPatchListLock, 0i64);
if( !MiUserSidPatchLists
|| (v9 = (struct _DMA_ADAPTER *)PsReferencePrimaryToken((PEPROCESS)v6),
SeQueryUserSidToken(v9, result, 0x44ui64, 0i64),
(UserSidHotPatchContext = MiFindUserSidHotPatchContext(result)) == 0i64)
|| (unsigned int)MiFindHotPatchRecord((_QWORD **)UserSidHotPatchContext + 3, 1ui64, v4, v5, StringOut, a6) == -1073741275 )
{
MiFindHotPatchRecord((_QWORD **)&MiGlobalHotPatchList, 1ui64, v4, v5, StringOut, a6);
}
if( _InterlockedCompareExchange64((volatile signed __int64 *)&MiHotPatchListLock, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)&MiHotPatchListLock);
KeAbPostRelease(&MiHotPatchListLock);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
if( v9 )
HalPutDmaAdapter(v9);
}Referenced by:
MiHotPatchImage