MiInsertPageFileInList

VOID __stdcall MiInsertPageFileInList(PUNICODE_STRING FileName){
  UINT64 v1; 
  unsigned int v3; 
  __int64 v4; 
  wchar_t *StartContext; 
  _ETHREAD *CurrentThread; 
  unsigned int v7; 
  volatile signed __int64 *v8; 
  __int64 v9; 
  int v10; 
  unsigned int v11; 
  __int16 v12; 
  __int64 *v13; 
  __int64 v14; 
  __int64 v15; 
  __int16 v16; 
  int v17; 
  __int16 v18; 
  char v19; 
  BOOL v20; 
  PVOID ThreadHandle; 
  UINT64 MaximumIncrement; 
  v1 = *(_QWORD *)&FileName->Length;
  ThreadHandle = 0i64;
  v3 = 0;
  MaximumIncrement = (UINT64)FileName->Buffer;
  BYTE6(FileName[12].Buffer) |= 1u;
  if( LODWORD(FileName[4].Buffer) )
  {
    do
    {
      v4 = v3++;
      **(_QWORD **)(*(_QWORD *)&FileName[4].Length + 8 * v4) = 2575857425i64;
    }
    while( v3 < LODWORD(FileName[4].Buffer) );
  }
  StartContext = FileName[15].Buffer;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v7 = 16;
  if( StartContext != (wchar_t *)&MiSystemPartition )
    v7 = 1;
  --*((_WORD *)CurrentThread + 243);
  v8 = (volatile signed __int64 *)(StartContext + 520);
  ExAcquirePushLockExclusiveEx((UINT64)(StartContext + 520), 0i64);
  if( dword_140C4E404 )
  {
    if( (_InterlockedExchangeAdd64(v8, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)StartContext + 130);
    goto LABEL_47;
  }
  if( !*((_QWORD *)StartContext + 20) )
  {
    if( !MiMakePartitionActive((_MI_PARTITION *)StartContext) )
    {
      if( (_InterlockedExchangeAdd64(v8, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock((volatile INT64 *)StartContext + 130);
      goto LABEL_47;
    }
    if( PsCreateSystemThreadEx(
           &ThreadHandle,
           0x1FFFFFui64,
           0i64,
           *(PVOID *)(*((_QWORD *)StartContext + 22) + 112i64),
           0i64,
           MiModifiedPageWriter,
           StartContext,
           0i64,
           0i64) < 0 )
    {
      if( (_InterlockedExchangeAdd64(v8, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock((volatile INT64 *)StartContext + 130);
      goto LABEL_47;
    }
    *((_QWORD *)StartContext + 20) = ThreadHandle;
  }
  v9 = *((unsigned int *)StartContext + 1734);
  if( (unsigned int)v9 >= v7 )
    goto LABEL_45;
  v10 = 0;
  WORD2(FileName[12].Buffer) ^= ((unsigned __int8)v9 ^ (unsigned __int8)WORD2(FileName[12].Buffer)) & 0xF;
  v11 = *((_DWORD *)StartContext + 1734);
  v12 = WORD2(FileName[12].Buffer);
  if( v11 )
  {
    v13 = (__int64 *)(StartContext + 3472);
    v14 = v11;
    do
    {
      v15 = *v13++;
      v16 = *(_WORD *)(v15 + 204);
      v17 = v10 + 1;
      if( (v16 & 0x800) == 0 )
        v17 = v10;
      v10 = v17;
      --v14;
    }
    while( v14 );
    if( v17 )
    {
      if( (v12 & 0x810) != 0 )
      {
        if( (_InterlockedExchangeAdd64(v8, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
          ExfTryToWakePushLock((volatile INT64 *)StartContext + 130);
        goto LABEL_47;
      }
      WORD2(FileName[12].Buffer) = v12 | 0x20;
    }
  }
  v18 = WORD2(FileName[12].Buffer);
  if( (v18 & 0x50) == 0 )
  {
    if( (unsigned int)MiIncreaseCommitLimits((_MI_PARTITION *)StartContext, v1, MaximumIncrement, 0i64, FileName) )
    {
      if( (BYTE4(FileName[12].Buffer) & 0x20) == 0 && !*((_DWORD *)StartContext + 259) )
        *((_DWORD *)StartContext + 259) = 1;
      goto LABEL_21;
    }
    if( (_InterlockedExchangeAdd64(v8, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)StartContext + 130);
LABEL_47:
    KeAbPostRelease(StartContext + 520);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
    return;
  }
  if( (v18 & 0x10) != 0 && (unsigned int)MiNumberWsSwapPagefiles((_MI_PARTITION *)StartContext) )
  {
LABEL_45:
    if( (_InterlockedExchangeAdd64(v8, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)StartContext + 130);
    goto LABEL_47;
  }
  MiUpdatePageFileList((__int64)FileName, 1);
  *(_QWORD *)&StartContext[4 * v9 + 3472] = FileName;
  *((_DWORD *)StartContext + 1734) = v9 + 1;
LABEL_21:
  v19 = _InterlockedExchangeAdd64(v8, 0xFFFFFFFFFFFFFFFFui64);
  if( (v19 & 2) != 0 && (v19 & 4) == 0 )
    ExfTryToWakePushLock((volatile INT64 *)StartContext + 130);
  KeAbPostRelease(StartContext + 520);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  MiUpdateReserveClusterInfo((INT64)StartContext, 0i64, 0);
  KeSetEvent((PRKEVENT)(StartContext + 440), v20);
}

Referenced by:

MiCreatePagingFile
MmStoreRegister