PsGetNextPartitionUnsafe

NTSTATUS __stdcall PsGetNextPartitionUnsafe(PVOID Object){
  NTSTATUS v2; 
  unsigned __int8 v3; 
  void **v4; 
  unsigned __int64 v5; 

  v2 = 0;
  v3 = ExAcquireSpinLockShared((INT64 *)((char *)&PspStorageBitmap.OrderedPointer + 4));
  v4 = (void **)*(&stru_140C00F40 + 890);
  v5 = v3;
  if( Object )
    v4 = (void **)*((_QWORD *)Object + 5);
  while( v4 != (void **)((char *)&stru_140C00F40 + 7120) )
  {
    if( ObReferenceObjectSafeWithTag((INT64)(v4 - 5), 1850045264i64) )
    {
      v2 = (_DWORD)v4 - 40;
      break;
    }
    v4 = (void **)*v4;
  }
  ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)&PspStorageBitmap.OrderedPointer + 1);
  __writecr8(v5);
  if( Object )
    ObfDereferenceObjectWithTag(Object, 0x6E457350ui64);
  return v2;
}

Referenced by:

CcForEachPartition
CcUnmapInactiveViews
ExSwapinWorkerThreads
PsGetNextPartition