MiZeroCfgSystemWideBitmapWorker

void __fastcall MiZeroCfgSystemWideBitmapWorker(unsigned int *a1, unsigned __int64 a2, unsigned __int64 a3){
  unsigned __int64 v3; 
  __int64 v4; 
  unsigned __int64 v5; 
  unsigned __int64 v7; 
  __int64 v8; 
  unsigned int *v9; 
  __int64 v10; 
  UINT64 v11; 
  unsigned int *PagefileSubsection; 
  INT64 v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  UINT64 v16; 
  int v17; 
  __int64 v18; 
  _MMPFN *v19; 
  INT64 v20; 
  __int64 v21; 
  _MMPFN *v22; 
  INT64 v23; 
  WORK_QUEUE_TYPE v24; 
  unsigned __int64 v25; 
  UINT64 v26; 
  unsigned __int64 v27; 
  UINT64 v28; 
  UINT64 *v29; 
  UINT64 v30; 
  __int64 v31; 
  UINT64 v32; 
  __int16 v33; 
  volatile signed __int64 *v34; 
  UINT64 v35; 
  INT64 v36; 
  UINT64 v37; 
  VOID *v38; 
  void *v39; 
  INT64 v40; 
  UINT64 v41; 
  INT64 v42; 
  bool v43; 
  _LIST_ENTRY *v44; 
  void *v45; 
  void *v46; 
  INT64 v47; 
  INT64 v48; 
  UINT64 v49; 
  INT64 v50; 
  unsigned __int64 v51; 
  volatile signed __int32 *v52; 
  unsigned int v53; 
  int v54; 
  unsigned __int64 v55; 
  INT64 v56; 
  INT64 v57; 
  _MI_PARTITION *Partition; 
  _MMPFN *v59; 
  INT64 v60; 
  UINT64 v61; 
  INT64 v62; 
  INT64 v63; 
  unsigned int *v64; 
  unsigned __int64 v65; 
  UINT64 v66; 
  unsigned __int64 v67; 
  struct _IO_WORKITEM LockHandle; 
  UINT64 PageIrql; 
  int v70; 
  int v71; 
  unsigned int v72; 
  v3 = a3 >> 3;
  v4 = *(_QWORD *)a1;
  v5 = a2 >> 3;
  memset(&LockHandle, 0, 24);
  v7 = (a2 >> 3) & 0xFFF;
  v8 = *(_WORD *)(v4 + 60) & 0x3FF;
  v72 = (a2 >> 3) & 0xFFF;
  Partition = *(_MI_PARTITION **)(qword_140C4E388 + 8 * v8);
  v70 = ((a2 >> 3) + v3) & 0xFFF;
  v65 = ((a2 >> 3) + v3 - 1) >> 12;
  v9 = MiLocatePagefileSubsection(a1, &v65);
  v64 = v9;
  v67 = v65;
  v10 = *((_QWORD *)v9 + 1);
  v63 = v5 >> 12;
  v11 = v10 + 8 * v65;
  PagefileSubsection = MiLocatePagefileSubsection(a1, (unsigned __int64 *)&v63);
  if( *((_QWORD *)PagefileSubsection + 1) )
  {
    v13 = v63;
  }
  else
  {
    do
    {
      if( PagefileSubsection == v9 )
        return;
      PagefileSubsection = (unsigned int *)*((_QWORD *)PagefileSubsection + 2);
      v13 = 0i64;
      v63 = 0i64;
    }
    while( !*((_QWORD *)PagefileSubsection + 1) );
  }
  v14 = *((_QWORD *)PagefileSubsection + 1);
  v15 = v14 + 8 * v13;
  if( PagefileSubsection == v9 )
    v16 = v11;
  else
    v16 = v14 + 8i64 * PagefileSubsection[11];
  v17 = v70;
  v56 = v16;
  LOBYTE(PageIrql) = 17;
  v57 = 0i64;
  v18 = v15 & -(__int64)((_DWORD)v7 != 0);
  v19 = 0i64;
  v59 = 0i64;
  v20 = 0i64;
  v60 = v18;
  v21 = v11 & -(__int64)(v70 != 0);
  v62 = v21;
  while( v15 < v16 )
  {
LABEL_7:
    if( (v20 & 0xFFFFFFFFFFFFF000ui64) != (v15 & 0xFFFFFFFFFFFFF000ui64) && v20 )
    {
      LOBYTE(v16) = PageIrql;
      MiUnlockProtoPoolPage(v19, v16);
      v19 = 0i64;
      v57 = 0i64;
      v59 = 0i64;
    }
    if( v19 )
    {
LABEL_9:
      v22 = MiLockLeafPage((_MMPTE *)v15, 0i64);
      v23 = MI_READ_PTE_LOCK_FREE(v15);
      v66 = v23;
      v26 = v23;
      if( (v23 & 1) != 0 )
      {
        MiPteInShadowRange((UINT64)&v66);
        LODWORD(v38) = MiMapPageInHyperSpaceWorker((v26 >> 12) & 0xFFFFFFFFFi64, 0i64, 0x80000000ui64);
        v39 = v38;
        if( v15 == v18 )
        {
          v40 = (INT64)v38 + v72;
        }
        else
        {
          v40 = (INT64)v38;
          if( v15 != v21 )
          {
            KeZeroSinglePage(v38);
LABEL_44:
            MiUnmapPageInHyperSpaceWorker(v39, 0x11u, 0x80000000ui64);
            v41 = MiCaptureDirtyBitToPfn((INT64)v22);
            _InterlockedAnd64((volatile signed __int64 *)v22 + 3, 0x7FFFFFFFFFFFFFFFui64);
            if( !v41 )
              goto LABEL_25;
            v49 = v41;
            v25 = (*((_QWORD *)v22 + 5) >> 39) & 0x3FFi64;
            v50 = *(_QWORD *)(qword_140C4E388 + 8 * v25);
            goto LABEL_84;
          }
        }
        memset(v40, 0i64);
        goto LABEL_44;
      }
      if( (v23 & 0x400) != 0 )
        goto LABEL_25;
      if( (v23 & 0x800) == 0 )
      {
        if( v23 && v15 != v18 && v15 != v21 )
        {
          if( (v23 & 2) != 0 )
          {
            v36 = *((_QWORD *)Partition + ((unsigned __int16)v23 >> 12) + 868);
            if( qword_140C4DC80 && (v23 & 0x10) == 0 )
              v23 &= ~qword_140C4DC80;
            v35 = HIDWORD(v23);
          }
          else
          {
            v35 = 0i64;
            v36 = 0i64;
          }
          v37 = MiTransferSoftwarePte(v26, v36, v35);
          MiReleasePageFileSpace(Partition, v26, 0i64);
          *(_QWORD *)v15 = v37;
        }
        goto LABEL_25;
      }
      if( qword_140C4DC80 )
      {
        if( (v23 & 0x10) != 0 )
          v26 = v23 & 0xFFFFFFFFFFFFFFEFui64;
        else
          v26 = ~qword_140C4DC80 & v23;
      }
      v27 = (v26 >> 12) & 0xFFFFFFFFFi64;
      v28 = 0i64;
      if( *((_WORD *)v22 + 16) )
        goto LABEL_24;
      if( v15 == v60 || v15 == v21 )
      {
        v43 = (*((_BYTE *)v22 + 34) & 0x10) == 0;
        v71 = 0;
        if( !v43 )
        {
          v44 = (_LIST_ENTRY *)*((_QWORD *)Partition + 530);
          LockHandle.WorkItem.List.Flink = 0i64;
          LockHandle.WorkItem.List.Blink = v44 + 2;
          KxAcquireQueuedSpinLock(&LockHandle, (PIO_WORKITEM_ROUTINE)&v44[2], v24, (PVOID)v25);
          goto LABEL_52;
        }
        v71 = 1;
        if( (unsigned int)MiUnlinkPageFromList(v22, 0i64) )
        {
          v28 = MiCaptureDirtyBitToPfn((INT64)v22);
          v44 = 0i64;
LABEL_52:
          LODWORD(v45) = MiMapPageInHyperSpaceWorker(v27, 0i64, 0x80000000ui64);
          v46 = v45;
          if( v15 == v60 )
            v47 = (INT64)v45 + v72;
          else
            v47 = (INT64)v45;
          memset(v47, 0i64);
          MiUnmapPageInHyperSpaceWorker(v46, 0x11u, 0x80000000ui64);
          if( dword_140C4E40C == 1 )
          {
            v51 = v27 & 0x1F;
            v25 = 1i64;
            v52 = (volatile signed __int32 *)(qword_140C4E468 + 4 * (v27 >> 5));
            if( v51 + 1 > 0x20 )
            {
              if( (v27 & 0x1F) != 0 )
              {
                v54 = v27 & 0x1F;
                _InterlockedOr(v52++, ((1 << (32 - v54)) - 1) << v51);
                v25 = 1i64 - (unsigned int)(32 - v54);
                if( v25 >= 0x20 )
                {
                  v55 = v25 >> 5;
                  v25 += -32i64 * (v25 >> 5);
                  do
                  {
                    *v52++ = -1;
                    --v55;
                  }
                  while( v55 );
                }
                if( !v25 )
                  goto LABEL_55;
              }
              v53 = (1 << v25) - 1;
            }
            else
            {
              v53 = 1 << v51;
            }
            _InterlockedOr(v52, v53);
          }
LABEL_55:
          if( v44 )
            KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&LockHandle);
          if( v71 == 1 )
            MiInsertPageInList(v22, 8ui64);
LABEL_23:
          v21 = v62;
LABEL_24:
          _InterlockedAnd64((volatile signed __int64 *)v22 + 3, 0x7FFFFFFFFFFFFFFFui64);
          if( !v28 )
          {
LABEL_25:
            v19 = v59;
            v15 += 8i64;
            v9 = v64;
            v18 = v60;
            goto LABEL_26;
          }
          v50 = (INT64)Partition;
          v49 = v28;
LABEL_84:
          MiReleasePageFileInfo(v50, v49, 1, v25, v56, v57, (INT64)Partition, (INT64)v59, v60, v61, v62, v63);
          goto LABEL_25;
        }
      }
      else if( (unsigned int)MiUnlinkPageFromList(v22, 0i64) )
      {
        v29 = (UINT64 *)((char *)v22 + 16);
        v30 = MiCapturePageFileInfoInline((UINT64 *)v22 + 2, 0i64, 0i64);
        v31 = *((_QWORD *)v22 + 2);
        v28 = v30;
        if( (v31 & 2) != 0 )
        {
          v42 = *((_QWORD *)Partition + ((unsigned __int16)v31 >> 12) + 868);
          if( qword_140C4DC80 && (v31 & 0x10) == 0 )
            v31 &= ~qword_140C4DC80;
          v32 = MiTransferSoftwarePte(*v29, v42, HIDWORD(v31));
        }
        else
        {
          v61 = *v29;
          MiSetNonResidentPteHeat(&v61, 0i64);
          v32 = v61;
          if( (v33 & 0x400) == 0 )
          {
            v32 = v61 & 0xFFFFFFFFFFFFFFF9ui64;
            v61 &= 0xFFFFFFFFFFFFFFF9ui64;
          }
        }
        v34 = (volatile signed __int64 *)((char *)MmGetPfnDb() + 48 * (*((_QWORD *)v22 + 5) & 0xFFFFFFFFFi64));
        v71 = 0;
        *(_QWORD *)v15 = v32;
        MiLockNestedPageAtDpcInline((INT64)v34);
        MiDecrementShareCount((UINT64)v34);
        _InterlockedAnd64(v34 + 3, 0x7FFFFFFFFFFFFFFFui64);
        MiInsertPageInFreeOrZeroedList(v27, 2ui64);
        goto LABEL_23;
      }
      MiDiscardTransitionPteEx((UINT64)v22, 0i64);
      _InterlockedAnd64((volatile signed __int64 *)v22 + 3, 0x7FFFFFFFFFFFFFFFui64);
      v19 = v59;
      v15 += 8i64;
      v9 = v64;
      v16 = v56;
      v18 = v60;
      v20 = v57;
      v17 = v70;
    }
    else
    {
      v59 = MiLockProtoPoolPage((_MMPTE *)v15, (UINT8 *)&PageIrql);
      v19 = v59;
      if( v59 )
      {
        v57 = v15;
        goto LABEL_9;
      }
      v15 = (v15 & 0xFFFFFFFFFFFFF000ui64) + 4096;
LABEL_26:
      v16 = v56;
      v20 = v57;
      v17 = v70;
    }
  }
  while( PagefileSubsection != v9 )
  {
    PagefileSubsection = (unsigned int *)*((_QWORD *)PagefileSubsection + 2);
    if( *((_QWORD *)PagefileSubsection + 1) )
    {
      v15 = *((_QWORD *)PagefileSubsection + 1);
      if( PagefileSubsection == v9 )
      {
        v16 = *((_QWORD *)v9 + 1) + 8 * v67;
        v48 = v16;
        if( !v17 )
          v48 = v21;
        v21 = v48;
        v62 = v48;
      }
      else
      {
        v16 = v15 + 8i64 * PagefileSubsection[11];
      }
      v56 = v16;
      goto LABEL_7;
    }
  }
  if( v19 )
  {
    LOBYTE(v16) = PageIrql;
    MiUnlockProtoPoolPage(v19, v16);
  }
}

Referenced by:

MiZeroCfgSystemWideBitmap