MiGetFileHashPage

UINT64 __fastcall MiGetFileHashPage(__int64 a1, unsigned int a2){
  __int64 v2; 
  unsigned __int64 v3; 
  UINT64 Page; 
  UINT64 v6; 
  _DWORD *v7; 
  void *v8; 
  unsigned __int64 v9; 
  struct _KPRCB *CurrentPrcb; 
  __int64 v12; 
  bool v13; 
  signed __int32 v14; 
  UINT8 OldIrql; 
  v2 = *(_QWORD *)(a1 + 248);
  v3 = 1i64;
  OldIrql = 0;
  if( (MiAcquireNonPagedResources((_MI_PARTITION *)v2, 1ui64) & 0x80000000) == 0i64 )
  {
    Page = MiGetPage((_MI_PARTITION *)v2, a2, 0x200ui64);
    v6 = Page;
    if( Page == -1i64 )
    {
      MiReturnCommit((_MI_PARTITION *)v2, 1ui64);
      if( (ULONG_PTR *)v2 != &MiSystemPartition )
        goto LABEL_21;
      CurrentPrcb = KeGetCurrentPrcb();
      v12 = *((int *)CurrentPrcb + 8391);
      if( (_DWORD)v12 == -1 )
        goto LABEL_21;
      if( (unsigned __int64)(v12 + 1) <= 0x100 )
      {
        do
        {
          v14 = _InterlockedCompareExchange((volatile signed __int32 *)CurrentPrcb + 8391, v12 + 1, v12);
          v13 = (_DWORD)v12 == v14;
          LODWORD(v12) = v14;
          if( v13 )
            return v6;
        }
        while( v14 != -1 && (unsigned __int64)(v14 + 1i64) <= 0x100 );
      }
      if( (int)v12 > 192
        && (_DWORD)v12 != -1
        && (_DWORD)v12 == _InterlockedCompareExchange((volatile signed __int32 *)CurrentPrcb + 8391, 192, v12) )
      {
        v3 = (int)v12 - 192 + 1i64;
      }
      if( v3 )
LABEL_21:
        _InterlockedExchangeAdd64((volatile signed __int64 *)(v2 + 7168), v3);
    }
    else
    {
      LODWORD(v7) = MiMapPageInHyperSpaceWorker(Page, &OldIrql, 0x80000000ui64);
      v8 = v7;
      v9 = 1024i64;
      if( ((unsigned __int8)v7 & 4) != 0 )
      {
        *v7 = 0;
        v8 = v7 + 1;
        v9 = 1023i64;
      }
      memset(v8, 0, 8 * (v9 >> 1));
      if( (v9 & 1) != 0 )
        *((_DWORD *)v8 + v9 - 1) = 0;
      MiUnmapPageInHyperSpaceWorker(v7, OldIrql, 0x80000000ui64);
      _InterlockedAdd64(&qword_140C4F568, 1ui64);
    }
    return v6;
  }
  return -1i64;
}

Referenced by:

MiMapPageFileHash