MmGetPageFileForCrashDump

VOID *__stdcall MmGetPageFileForCrashDump(){
  _ETHREAD *CurrentThread; 
  VOID *v1; 
  unsigned __int64 v2; 
  char *v3; 
  __int64 v4; 
  __int64 v5; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v1 = 0i64;
  v2 = 0i64;
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&stru_140C50B28 + 117, 0i64);
  if( *(&stru_140C50B28 + 1708) )
  {
    v3 = (char *)&stru_140C50B28 + 6840;
    v4 = *(&stru_140C50B28 + 1708);
    do
    {
      v5 = *(_QWORD *)v3;
      if( (*(_WORD *)(*(_QWORD *)v3 + 204i64) & 0x850) == 0 && *(_QWORD *)(v5 + 16) > v2 )
      {
        v1 = *(VOID **)(v5 + 224);
        v2 = *(_QWORD *)(v5 + 16);
      }
      v3 += 8;
      --v4;
    }
    while( v4 );
  }
  if( (_InterlockedExchangeAdd64((_QWORD *)&stru_140C50B28 + 117, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((_EX_PUSH_LOCK *)&stru_140C50B28 + 117);
  KeAbPostRelease((char *)&stru_140C50B28 + 936);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  return v1;
}

Referenced by:

IoConfigureCrashDump