CmpGetCallbackObjectContext
NTSTATUS __stdcall CmpGetCallbackObjectContext(PVOID Object, LARGE_INTEGER *Cookie){
__int64 v2;
_QWORD *v4;
_ETHREAD *CurrentThread;
_QWORD *v7;
LONGLONG QuadPart;
LODWORD(v2) = 0;
if( !Object )
return 0;
if( *(_DWORD *)Object != 1803104306 )
return 0;
v4 = (char *)Object + 72;
if( (_QWORD *)*v4 == v4 )
return 0;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&CmpContextListLock, 0i64);
v7 = (_QWORD *)*v4;
if( (_QWORD *)*v4 != v4 )
{
QuadPart = Cookie->QuadPart;
while( v7[4] != QuadPart )
{
if( v7[4] >= QuadPart )
{
v7 = (_QWORD *)*v7;
if( v7 != v4 )
continue;
}
goto LABEL_9;
}
v2 = v7[7];
}
LABEL_9:
ExReleasePushLockEx((UINT64)&CmpContextListLock, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return v2;
}Referenced by:
CmpCallbackFillObjectContext