CmpHandlePageFileOpenNotification

INT64 __stdcall CmpHandlePageFileOpenNotification(){
  unsigned int v0; 
  _ETHREAD *CurrentThread; 
  INT64 v2; 
  INT64 v3; 
  int v4; 
  int v5; 
  __int64 **v6; 
  INT64 *v7; 
  _CMHIVE *i; 
  _CMHIVE *NextActiveHive; 
  _CMHIVE *v10; 
  KAPC_STATE ApcState; 
  memset(&ApcState, 0, sizeof(ApcState));
  v0 = 0;
  if( _InterlockedExchange(&CmpBootPageFilesCreated, 1) )
  {
    return(unsigned int)-1073741790;
  }
  else
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 242);
    if( ExAcquireRundownProtection((PEX_RUNDOWN_REF)&CmpShutdownRundown) )
    {
      v4 = 0;
      v5 = 0;
      if( CmpWellKnownVolumeList )
      {
        v6 = &CmpWellKnownVolumeList;
        do
        {
          v7 = (INT64 *)(v6 + 1);
          if( (int)CmpVolumeManagerGetContextForFilePath(v2, (INT64)*v6, v3, (INT64 *)v6 + 1) >= 0
            && (int)CmpVolumeContextSendDeviceUsageNotification(*v7) >= 0 )
          {
            ++v4;
          }
          v6 = &(&CmpWellKnownVolumeList)[2 * (unsigned int)++v5];
        }
        while( *v6 );
        if( v4 )
        {
          CmpAttachToRegistryProcess(&ApcState);
          for( i = 0i64; ; i = v10 )
          {
            NextActiveHive = CmpGetNextActiveHive(i);
            v10 = NextActiveHive;
            if( !NextActiveHive )
              break;
            CmpRecheckHiveVolumePolicy((INT64)NextActiveHive);
          }
          KiUnstackDetachProcess(&ApcState, 0i64);
        }
      }
      ExReleaseRundownProtection((PEX_RUNDOWN_REF)&CmpShutdownRundown);
      KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
    }
    else
    {
      KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
      return(unsigned int)-1073741431;
    }
  }
  return v0;
}

Referenced by:

NtInitializeRegistry