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.