HvpFinishPrimaryWrite

VOID __stdcall HvpFinishPrimaryWrite(_HHIVE *Hive, UINT8 Success, UINT8 DiskFileBad, UINT8 LocksHeld){
  char v4; 
  unsigned int v5; 
  int v6; 

  v4 = 0;
  v5 = Hive->HiveFlags & 0x100;
  v6 = DiskFileBad;
  if( (Success == (v5 != 0) || ((LODWORD(Hive[2].Storage[1].FreeDisplay[10].Display.Buffer) >> 1) & 1) != DiskFileBad)
    && !LocksHeld )
  {
    CmpLockRegistry();
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&Hive->FlusherLock, 0i64);
    v4 = 1;
  }
  if( Success )
  {
    if( v5 )
      Hive->HiveFlags &= ~0x100u;
  }
  else if( !v5 )
  {
    CmpLogEvent(
      (_EVENT_DESCRIPTOR *)®_EVENT_FLUSH_IO_FAIL,
      3221225805i64,
      (_UNICODE_STRING *)&Hive[1].Storage[0].Guard,
      (_UNICODE_STRING *)LocksHeld);
    Hive->HiveFlags |= 0x100u;
  }
  if( ((LODWORD(Hive[2].Storage[1].FreeDisplay[10].Display.Buffer) >> 1) & 1) != v6 )
    LODWORD(Hive[2].Storage[1].FreeDisplay[10].Display.Buffer) ^= ((unsigned __int8)LODWORD(Hive[2].Storage[1].FreeDisplay[10].Display.Buffer) ^ (unsigned __int8)(2 * v6)) & 2;
  if( v4 )
  {
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&Hive->FlusherLock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)&Hive->FlusherLock);
    KeAbPostRelease(&Hive->FlusherLock);
    CmpUnlockRegistry();
  }
}

Referenced by:

HvWriteHivePrimaryFile