CcPostWorkQueueRegular

NTSTATUS __stdcall CcPostWorkQueueRegular(_WORK_QUEUE_ENTRY *WorkEntry, _LIST_ENTRY *WorkQueue){
  __int64 v2; 
  _QWORD *v3; 
  _LIST_ENTRY *Blink; 
  _QWORD *v7; 
  __int64 *v8; 
  __int64 v9; 
  NTSTATUS result; 
  unsigned __int64 v11; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  v2 = *((_QWORD *)WorkEntry + 16);
  v3 = 0i64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( (xmmword_140CFB490 & 0x20000) != 0 )
    CcPerfLogWorkItemEnqueue(WorkQueue, WorkEntry, 0, ((*((_BYTE *)WorkEntry + 120) - 2) & 0xFD) == 0);
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)(v2 + 192), &LockHandle);
  if( *((_BYTE *)WorkEntry + 120) == 3 && *(_QWORD *)(v2 + 256) != v2 + 256 )
  {
    v11 = *(_QWORD *)(v2 + 640);
    if( (v11 >= *(_QWORD *)(v2 + 664) >> 2 || v11 > *(_QWORD *)(**(_QWORD **)(v2 + 8) + 7104i64) >> 1)
      && *(_DWORD *)(v2 + 960) >= *(_DWORD *)(v2 + 200) )
    {
      *(_BYTE *)(v2 + 776) = 1;
    }
  }
  Blink = WorkQueue->Blink;
  if( Blink->Flink != WorkQueue )
    goto LABEL_22;
  *(_QWORD *)WorkEntry = WorkQueue;
  *((_QWORD *)WorkEntry + 1) = Blink;
  Blink->Flink = (_LIST_ENTRY *)WorkEntry;
  WorkQueue->Blink = (_LIST_ENTRY *)WorkEntry;
  if( *(_BYTE *)(v2 + 352) )
    goto LABEL_11;
  v7 = (_QWORD *)(v2 + 208);
  v8 = *(__int64 **)(v2 + 208);
  if( v8 == (__int64 *)(v2 + 208)
    || *((_BYTE *)WorkEntry + 120) == 2 && (unsigned int)(*(_DWORD *)(v2 + 368) + 1) > *(_DWORD *)(v2 + 960) )
  {
    goto LABEL_11;
  }
  v3 = *(_QWORD **)(v2 + 208);
  v9 = *v8;
  if( (_QWORD *)v8[1] != v7 || *(__int64 **)(v9 + 8) != v8 )
LABEL_22:
    __fastfail(3u);
  *v7 = v9;
  *(_QWORD *)(v9 + 8) = v7;
  ++*(_DWORD *)(v2 + 204);
  if( _InterlockedIncrement64((volatile signed __int64 *)(v2 + 968)) <= 1 )
    __fastfail(0xEu);
LABEL_11:
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  result = KiIrqlFlags;
  __writecr8(LockHandle.OldIrql);
  if( v3 )
  {
    *v3 = 0i64;
    return ExQueueWorkItemToPartition(v3);
  }
  return result;
}

Referenced by:

CcPostWorkQueue