ObDereferenceObjectEx
NTSTATUS __stdcall ObDereferenceObjectEx(VOID *Object, UINT64 Count){
__int64 v2;
_OBJECT_HEADER *v3;
void *BugCheckParameter4;
v2 = (int)Count;
v3 = (_OBJECT_HEADER *)((char *)Object - 48);
ObpTraceObjectDereferenceIfActive((_OBJECT_HEADER *)((char *)Object - 48), (unsigned int)Count, 0x746C6644ui64);
BugCheckParameter4 = (void *)(_InterlockedExchangeAdd64(&v3->PointerCount, -(int)v2) - v2);
if( (__int64)BugCheckParameter4 <= 0 )
{
if( v3->HandleCount )
KeBugCheckEx(
0x18u,
(PVOID)ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ v3->TypeIndex ^ (unsigned __int64)BYTE1(v3)],
Object,
(PVOID)6,
v3->NextToFree);
if( (__int64)BugCheckParameter4 < 0 )
KeBugCheckEx(0x18u, 0i64, Object, (PVOID)5, BugCheckParameter4);
ObpDeferObjectDeletion(v3);
}
return(int)BugCheckParameter4;
}Referenced by:
MiCreateImageOrDataSection
PspClearProcessThreadCidRefs