CmpGetCallbackObjectContext
VOID *__stdcall CmpGetCallbackObjectContext(VOID *Object, LARGE_INTEGER *Cookie){
VOID *v2;
_QWORD *v4;
_ETHREAD *CurrentThread;
_QWORD *v7;
LONGLONG QuadPart;
v2 = 0i64;
if( !Object )
return 0i64;
if( *(_DWORD *)Object != 1803104306 )
return 0i64;
v4 = (char *)Object + 72;
if( (_QWORD *)*v4 == v4 )
return 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&CmpDummyThreadEvent + 254, 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 = (VOID *)v7[7];
}
LABEL_9:
ExReleasePushLockEx((ULONG_PTR)&CmpDummyThreadEvent + 2032, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v2;
}Referenced by:
CmpCallbackFillObjectContext