MiAllocatePfnRepurposeLogDispatch

VOID __stdcall MiAllocatePfnRepurposeLogDispatch(
        _KDPC *Dpc,
        VOID *DeferredContext,
        VOID *SystemArgument1,
        VOID *SystemArgument2){
  volatile unsigned __int64 TickCountQuad; 
  char *Pool; 
  void *v6; 
  __int64 v7; 
  __int64 v8; 
  unsigned int Alignment_low; 
  int v10; 
  _KLOCK_QUEUE_HANDLE LockQueue; 

  *(_QWORD *)&LockQueue.OldIrql = 0i64;
  TickCountQuad = KUSER_SHARED_DATA.TickCountQuad;
  Pool = (char *)MiAllocatePool(64i64, 0x1000ui64, 0x70526D4Dui64);
  v6 = Pool;
  if( Pool )
  {
    *(_QWORD *)Pool = 0i64;
    *((_QWORD *)Pool + 4) = Pool + 72;
    *((_QWORD *)Pool + 5) = Pool + 4088;
    *((_DWORD *)Pool + 2) = 2;
    *((_QWORD *)Pool + 2) = TickCountQuad;
  }
  LockQueue.LockQueue.Next = 0i64;
  LockQueue.LockQueue.Lock = (unsigned __int64 *volatile)((char *)&stru_140C4DB30 + 2640);
  KxAcquireQueuedSpinLock(&LockQueue.LockQueue, (UINT64 *)&stru_140C4DB30 + 330);
  v7 = *(&stru_140C4DB30 + 378);
  if( !*(&stru_140C4DB30 + 654) )
  {
LABEL_25:
    *(&stru_140C4DB30 + 378) = 0i64;
    goto LABEL_6;
  }
  if( v6 )
  {
    *(&stru_140C4DB30 + 378) = v6;
    v6 = 0i64;
    goto LABEL_6;
  }
  if( *(&stru_140C4DB30 + 378) )
  {
    if( (*(_DWORD *)(*(&stru_140C4DB30 + 378) + 32i64) & 0xFFFi64) != 0 )
    {
      v7 = 0i64;
      goto LABEL_6;
    }
    goto LABEL_25;
  }
LABEL_6:
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
  if( v6 )
    ExFreePoolWithTag(v6, 0);
  if( v7 )
  {
    v8 = *(_QWORD *)(v7 + 32);
    if( v8 == v7 + 72 )
      goto LABEL_27;
    if( (v8 & 0xFFF) != 0 )
    {
      if( TickCountQuad < *(_QWORD *)(v7 + 16) )
      {
        TickCountQuad = KUSER_SHARED_DATA.TickCountQuad;
        v8 = *(_QWORD *)(v7 + 32);
      }
      *(_QWORD *)(v7 + 24) = TickCountQuad;
      *(_QWORD *)(v7 + 40) = v8 - 8;
    }
    *(_QWORD *)(v7 + 32) = v7 + 72;
    if( !ExAcquireRundownProtection(&PfKernelGlobals.AccessBufferRef) )
      goto LABEL_27;
    Alignment_low = LOWORD(PfKernelGlobals.AccessBufferList.Alignment);
    if( LOWORD(PfKernelGlobals.AccessBufferList.Alignment) >= PfKernelGlobals.AccessBufferMax )
    {
      _InterlockedExchangeAdd((volatile signed __int32 *)&xmmword_140C4FC10, 0x64u);
      v10 = 0;
    }
    else
    {
      RtlpInterlockedPushEntrySList(&PfKernelGlobals.AccessBufferList, (PSLIST_ENTRY)v7);
      if( Alignment_low >= 8 && !*(_DWORD *)&PfKernelGlobals.gap10[4] )
        KeSetEvent((PRKEVENT)PfKernelGlobals.gap10, 0, 0);
      v10 = 1;
    }
    ExReleaseRundownProtection(&PfKernelGlobals.AccessBufferRef);
    if( !v10 )
LABEL_27:
      ExFreePoolWithTag((PVOID)v7, 0);
  }
}

Referenced by:

No references.