MiSubsectionProtosCreated

VOID __fastcall MiSubsectionProtosCreated(INT64 *a1, INT64 a2, INT64 a3, INT64 a4){
  INT64 v4; 
  int v5; 
  int v6; 
  unsigned __int64 v9; 
  INT64 v10; 
  int v11; 
  unsigned int v12; 
  INT64 v13; 
  int v14; 
  int v15; 
  v4 = *a1;
  v5 = a4;
  v6 = a3;
  KeAbPostRelease(a1);
  v9 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v4 + 72));
  if( (*(_DWORD *)(v4 + 56) & 0x20) != 0 )
  {
    v10 = *(_QWORD *)(v4 + 80);
    *(_QWORD *)(v4 + 80) = 0i64;
    goto LABEL_9;
  }
  v11 = *((_DWORD *)a1 + 13);
  if( v5 )
  {
    v12 = v11 | 0x40000000;
LABEL_7:
    *((_DWORD *)a1 + 13) = v12;
    goto LABEL_8;
  }
  if( v6 == *((_DWORD *)a1 + 11) - (v11 & 0x3FFFFFFF) )
  {
    v12 = v11 & 0xBFFFFFFF;
    goto LABEL_7;
  }
LABEL_8:
  v10 = a1[3];
  a1[3] = 0i64;
LABEL_9:
  if( v10 )
  {
    do
    {
      v13 = *(_QWORD *)v10;
      if( v10 != a2 )
      {
        v14 = *(_DWORD *)(v10 + 8);
        *(_DWORD *)(v10 + 12) = 1;
        if( (v14 & 0x40) == 0 )
        {
          v15 = 1;
          if( (*(_DWORD *)(a2 + 8) & 0x100) != 0 )
            v15 = 2;
          *(_DWORD *)(v10 + 12) = v15;
          KeSignalGate((_KGATE *)(v10 + 16), 1i64);
        }
      }
      v10 = v13;
    }
    while( v13 );
  }
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v4 + 72));
  __writecr8(v9);
}

Referenced by:

MiAllocateFileExtents
MiPurgeFileOnlyPfn
MmPurgeSection