PsGetNextPartitionUnsafe

NTSTATUS __stdcall PsGetNextPartitionUnsafe(PVOID Object){
  NTSTATUS v2; 
  KIRQL v3; 
  void **v4; 
  unsigned __int64 v5; 
  v2 = 0;
  v3 = ExAcquireSpinLockShared(&PspActivePartitionListLock);
  v4 = (void **)PspActivePartitionListHead;
  v5 = v3;
  if( Object )
    v4 = (void **)*((_QWORD *)Object + 5);
  while( v4 != &PspActivePartitionListHead )
  {
    if( ObReferenceObjectSafeWithTag(v4 - 5, 0x6E457350ui64) )
    {
      v2 = (_DWORD)v4 - 40;
      break;
    }
    v4 = (void **)*v4;
  }
  ExReleaseSpinLockSharedFromDpcLevel(&PspActivePartitionListLock);
  __writecr8(v5);
  if( Object )
    ObfDereferenceObjectWithTag(Object, 0x6E457350ui64);
  return v2;
}

Referenced by:

CcForEachPartition
CcUnmapInactiveViews
ExSwapinWorkerThreads
PsGetNextPartition