ObpProcessRemoveObjectQueue
VOID __stdcall ObpProcessRemoveObjectQueue(VOID *Parameter){
void *v1;
void *v2;
int v3;
__int128 **v4;
int v5;
unsigned int v6;
__int64 v7;
unsigned int v8;
int v9;
int *v10;
int v11;
__int64 v12;
_OBJECT_HEADER *v13;
_HANDLE_REVOCATION_INFO *v14;
_OBJECT_HEADER *HandleCount;
unsigned __int64 v16;
unsigned int v17;
unsigned __int64 v18;
signed __int32 v19[10];
__int128 *v20;
__int128 *v21;
KAPC_STATE ApcState;
if( !qword_140C13150 )
{
v16 = __rdtsc();
v17 = 41929663 * ((((unsigned __int64)HIDWORD(v16) << 32) | (unsigned int)v16) >> 4);
qword_140C13150 = v17;
if( !v17 )
qword_140C13150 = 1i64;
v18 = __rdtsc();
qword_140C13158 = (41929663 * (unsigned int)((((unsigned __int64)HIDWORD(v18) << 32) | (unsigned int)v18) >> 4)) ^ 0xC24i64;
qword_140C13160 = KiQueryUnbiasedInterruptTime(1u) + 41929663 * (__rdtsc() >> 4) % 0x12A05F2000i64 + 288000000000i64;
}
if( KiQueryUnbiasedInterruptTime(1u) >= qword_140C13160 )
{
v20 = &xmmword_140CFBC20;
v21 = &xmmword_140CFBA60;
LODWORD(v1) = MmGetNextSession(0i64);
v2 = v1;
if( v1 )
{
if( MmAttachSession(v1, &ApcState) >= 0 )
{
if( !qword_140C13168 )
qword_140C13168 = (unsigned int)KiTableInformation;
if( (_DWORD)xmmword_140CFBA70 && (_BYTE)KdDebuggerNotPresent )
{
v3 = 0;
v4 = &v21;
v5 = 2;
do
{
v6 = 0;
v7 = *(_QWORD *)*v4;
v8 = *((_DWORD *)*v4 + 4);
v9 = v3 + v7 + (unsigned int)*v4;
if( v8 )
{
v10 = *(int **)*v4;
do
{
v11 = *v10;
++v6;
v12 = *v10++;
v9 = v6 * ((v11 + *(_DWORD *)((v12 >> 4) + v7)) ^ v9);
}
while( v6 < v8 );
}
--v4;
v3 += 2 * v9;
--v5;
}
while( v5 );
if( v3 != qword_140C13168 && !qword_140C13120 )
{
v19[8] = -2071986176;
qword_140C13120 = (unsigned int)__ROL4__(-2071986176, 233);
xmmword_140C13128 = 0i64;
qword_140C13138 = 266i64;
qword_140C13140 = v7;
}
}
MmDetachSession(v2, &ApcState);
}
MmQuitNextSession(v2);
}
if( qword_140C13120 )
{
if( (VOID(__stdcall *)(KDPC *, PVOID, PVOID, PVOID))`ObpTraceDeferredDeletionWorker'::`2'::ObjectEventList.DeferredRoutine != KiScanQueues )
KeInitializeDpc(
&`ObpTraceDeferredDeletionWorker'::`2'::ObjectEventList,
KiScanQueues,
&`ObpTraceDeferredDeletionWorker'::`2'::ObjectEventList);
qword_140C13148 = 3878784i64;
KeInsertQueueDpc(&`ObpTraceDeferredDeletionWorker'::`2'::ObjectEventList, 0i64, 0i64);
}
qword_140C13160 = KiQueryUnbiasedInterruptTime(1u) + 41929663 * (__rdtsc() >> 4) % 0x12A05F2000i64 + 288000000000i64;
}
do
{
v13 = (_OBJECT_HEADER *)_InterlockedExchange64(&ObpRemoveObjectList, 1i64);
do
{
v14 = (_HANDLE_REVOCATION_INFO *)OBJECT_HEADER_TO_HANDLE_REVOCATION_INFO((INT64)v13);
if( v14 )
ObpHandleRevocationBlockRemoveObject(v14);
if( ObpTraceFlags )
ObpDeregisterObject(v13);
HandleCount = (_OBJECT_HEADER *)v13->HandleCount;
ObpRemoveObjectRoutine(v13, 1u);
v13 = HandleCount;
}
while( HandleCount && HandleCount != (_OBJECT_HEADER *)1 );
}
while( ObpRemoveObjectList != 1 || _InterlockedCompareExchange64(&ObpRemoveObjectList, 0i64, 1i64) != 1 );
_InterlockedOr(v19, 0);
if( ObpRemoveObjectWait.0 )
ExfUnblockPushLock(&ObpRemoveObjectWait, 0i64);
}Referenced by:
No references.