MiZeroPageCalibrateIsr

ULONG_PTR __fastcall MiZeroPageCalibrateIsr(ULONG_PTR Argument){
  struct _KPRCB *CurrentPrcb; 
  unsigned int v2; 
  __int64 v3; 
  __int64 v4; 
  unsigned int v5; 
  int v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  _DWORD *MmInternal; 
  __int64 v12; 
  signed __int32 v13; 
  unsigned int v14; 
  signed __int32 v15; 
  unsigned int v16; 
  unsigned int *v17; 
  unsigned __int64 v18; 
  unsigned int v19; 
  unsigned __int64 v20; 
  unsigned int v21; 
  int v22; 
  ULONG_PTR result; 
  unsigned __int32 v24; 
  __int64 v25; 
  VOID *v26; 
  unsigned int v27; 
  unsigned __int16 v28; 
  _DWORD *v29; 
  unsigned int i; 
  __int64 v31; 
  signed __int32 v32; 
  unsigned int v33; 
  unsigned int v34; 
  _DWORD *v35; 
  UINT64 *v36; 
  __int128 v37; 
  __int64 v38; 
  UINT64 *v39; 
  __int64 v40; 
  signed __int32 v41[8]; 
  __int64 v42; 
  struct _KPRCB *v43; 
  __int64 v44; 
  __int64 CurrentIrql; 
  UINT64 v46; 
  UINT64 SpinCount; 
  UINT64 v48; 
  UINT64 v49; 

  CurrentPrcb = KeGetCurrentPrcb();
  v2 = 0;
  v3 = *(_QWORD *)&Argument;
  v4 = *(_QWORD *)(*(_QWORD *)&Argument + 72i64);
  v5 = 0;
  v42 = v4;
  v43 = CurrentPrcb;
  v6 = 1;
  if( KeNumberNodes )
  {
    v7 = *(_QWORD *)(v4 + 16);
    do
    {
      v8 = 4544i64 * v5;
      if( CurrentPrcb->Group == *(_WORD *)(v8 + v7 + 4480)
        && (*(_QWORD *)(v8 + v7 + 4472) & CurrentPrcb->GroupSetMember) != 0 )
      {
        break;
      }
      ++v5;
    }
    while( v5 < (unsigned __int16)KeNumberNodes );
    v2 = 0;
  }
  v9 = *(_QWORD *)(v4 + 16) + 4544i64 * v5;
  v44 = *(_QWORD *)(v9 + 4432);
  *(_DWORD *)(v9 + 4440) = *(_DWORD *)(v44 + 128);
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(0xFui64);
  v10 = v44;
  while( 1 )
  {
    MmInternal = CurrentPrcb->MmInternal;
    v12 = *(_QWORD *)(v3 + 32) + 16i64 * (unsigned int)(*(_DWORD *)(v3 + 40) - 1);
    LODWORD(SpinCount) = 0;
    MmInternal[3121] = 0;
    v13 = _InterlockedDecrement((volatile signed __int32 *)v3);
    v14 = ~v13 & 0x80000000;
    if( (v13 & 0x7FFFFFFF) != 0 )
    {
      while( (*(_DWORD *)v3 & 0x80000000) != v14 )
        KeYieldProcessorEx(&SpinCount);
      v2 = 0;
      LODWORD(v48) = 0;
      v15 = _InterlockedDecrement((volatile signed __int32 *)v3);
      v16 = ~v15 & 0x80000000;
      if( (v15 & 0x7FFFFFFF) == 0 )
      {
        *(_DWORD *)v3 = v16 | *(_DWORD *)(v3 + 4);
        goto LABEL_23;
      }
      while( (*(_DWORD *)v3 & 0x80000000) != v16 )
        KeYieldProcessorEx(&v48);
LABEL_22:
      v2 = 0;
LABEL_23:
      v4 = v42;
      CurrentPrcb = v43;
      goto LABEL_24;
    }
    *(_DWORD *)v3 = *(_DWORD *)(v3 + 4) | v14;
    if( KeNumberNodes )
    {
      v17 = (unsigned int *)(*(_QWORD *)(v4 + 16) + 4440i64);
      do
      {
        if( *v17 )
          v18 = (*((_QWORD *)v17 - 3) / (unsigned __int64)*v17) & 0xFFFFFFFFFFFFF000ui64;
        else
          v18 = 0i64;
        *((_QWORD *)v17 - 2) = v18;
        ++v2;
        v19 = (unsigned __int16)KeNumberNodes;
        v17[1] = 0;
        v17 += 1136;
      }
      while( v2 < v19 );
    }
    v2 = 0;
    *(_DWORD *)(v3 + 44) = 0;
    v20 = __rdtsc();
    *(_QWORD *)(v3 + 56) = ((unsigned __int64)HIDWORD(v20) << 32) | (unsigned int)v20;
    _InterlockedOr(v41, 0);
    LODWORD(v46) = 0;
    LODWORD(v20) = _InterlockedDecrement((volatile signed __int32 *)v3);
    v21 = ~(_DWORD)v20 & 0x80000000;
    if( (v20 & 0x7FFFFFFF) != 0 )
    {
      while( (*(_DWORD *)v3 & 0x80000000) != v21 )
        KeYieldProcessorEx(&v46);
      goto LABEL_22;
    }
    *(_DWORD *)v3 = *(_DWORD *)(v3 + 4) | v21;
LABEL_24:
    if( CurrentPrcb->Group == *(_WORD *)(v10 + 120) && (CurrentPrcb->GroupSetMember & *(_QWORD *)(v10 + 112)) != 0 )
    {
      v24 = _InterlockedIncrement((volatile signed __int32 *)(v9 + 4444));
      if( v24 <= *(_DWORD *)(v9 + 4440) )
      {
        v25 = *(_QWORD *)(v9 + 4424);
        v26 = (VOID *)(*(_QWORD *)(v9 + 4408) + v25 * (v24 - 1));
        if( *(_DWORD *)(v3 + 48) == 1 )
          KeZeroPages(v26, *(_QWORD *)(v9 + 4424));
        else
          memset(v26, 0i64, v25);
        v32 = _InterlockedExchangeAdd((volatile signed __int32 *)(v9 + 4448), 1u);
        v4 = v42;
        v2 = 0;
        if( v32 + 1 == *(_DWORD *)(v9 + 4440) )
        {
          _InterlockedOr(v41, 0);
          *(_QWORD *)(16i64 * (unsigned int)(*(_DWORD *)(v9 + 4440) - 1)
                    + *(_QWORD *)(v9 + 4384)
                    + 8i64 * *(int *)(v3 + 48)) = __rdtsc() - *(_QWORD *)(v3 + 56);
          *(_DWORD *)(v9 + 4448) = 0;
        }
      }
    }
    v22 = KeNumberProcessors_0;
    if( _InterlockedIncrement((volatile signed __int32 *)(v3 + 44)) == v22 )
    {
      _InterlockedOr(v41, 0);
      v27 = 0;
      *(_QWORD *)(v12 + 8i64 * *(int *)(v3 + 48)) = __rdtsc() - *(_QWORD *)(v3 + 56);
      v28 = KeNumberNodes;
      if( KeNumberNodes )
      {
        v29 = (_DWORD *)(*(_QWORD *)(v4 + 16) + 4440i64);
        do
        {
          if( *v29 )
          {
            --*v29;
            --*(_DWORD *)(v3 + 40);
          }
          v28 = KeNumberNodes;
          v29 += 1136;
          ++v27;
        }
        while( v27 < (unsigned __int16)KeNumberNodes );
      }
      if( !*(_DWORD *)(v3 + 40) )
      {
        if( *(_DWORD *)(v3 + 48) )
        {
          v36 = (UINT64 *)(v4 + 6368);
          v37 = *(_OWORD *)(v3 + 8);
          *(_QWORD *)(v3 + 64) = *(_QWORD *)(v4 + 6392);
          v6 = 2;
          v38 = *(_QWORD *)(v4 + 16);
          *(_OWORD *)(v4 + 6368) = v37;
          *(_OWORD *)(v4 + 6384) = *(_OWORD *)(v3 + 24);
          if( v28 )
          {
            v39 = (UINT64 *)(v38 + 4360);
            v40 = v28;
            do
            {
              MiComputeOptimalWriteProcessors(v39);
              v39 += 568;
              --v40;
            }
            while( v40 );
          }
          MiComputeOptimalWriteProcessors(v36);
          v4 = v42;
          v2 = 0;
        }
        else
        {
          *(_DWORD *)(v3 + 48) = 1;
          v33 = 0;
          v34 = (unsigned __int16)KeNumberNodes;
          *(_DWORD *)(v3 + 40) = *(_DWORD *)(v4 + 6404);
          if( (_WORD)v34 )
          {
            v35 = (_DWORD *)(*(_QWORD *)(v4 + 16) + 4440i64);
            do
            {
              ++v33;
              *v35 = *(v35 - 20);
              v35 += 1136;
            }
            while( v33 < v34 );
          }
        }
      }
      for( i = 0; i < (unsigned int)KeNumberProcessors_0; *((_DWORD *)(*(&KiProcessorBlock + v31))->MmInternal + 3121) = v6 )
        v31 = i++;
    }
    else
    {
      LODWORD(v49) = 0;
      while( 1 )
      {
        v6 = MmInternal[3121];
        if( v6 )
          break;
        KeYieldProcessorEx(&v49);
        v2 = 0;
      }
      v4 = v42;
    }
    CurrentPrcb = v43;
    if( v6 != 1 )
      break;
    v6 = 1;
  }
  result = (unsigned __int8)CurrentIrql;
  __writecr8((unsigned __int8)CurrentIrql);
  return result;
}

Referenced by:

No references.