HvpFinishPrimaryWrite

VOID __fastcall HvpFinishPrimaryWrite(INT64 a1, INT64 a2, INT64 a3, UNICODE_STRING *a4){
  char v4; 
  int v5; 
  int v6; 
  char v7; 
  v4 = 0;
  v5 = *(_DWORD *)(a1 + 160) & 0x100;
  v6 = (unsigned __int8)a3;
  v7 = a2;
  if( ((_BYTE)a2 == (v5 != 0) || ((*(_DWORD *)(a1 + 4264) >> 1) & 1) != (unsigned __int8)a3) && !(_BYTE)a4 )
  {
    CmpLockRegistry();
    ExAcquirePushLockExclusiveEx(a1 + 72, 0i64);
    v4 = 1;
  }
  if( v7 )
  {
    if( v5 )
      *(_DWORD *)(a1 + 160) &= ~0x100u;
  }
  else if( !v5 )
  {
    CmpLogEvent((INT64)®_EVENT_FLUSH_IO_FAIL);
    *(_DWORD *)(a1 + 160) |= 0x100u;
  }
  if( ((*(_DWORD *)(a1 + 4264) >> 1) & 1) != v6 )
    *(_DWORD *)(a1 + 4264) ^= ((unsigned __int8)*(_DWORD *)(a1 + 4264) ^ (unsigned __int8)(2 * v6)) & 2;
  if( v4 )
  {
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(a1 + 72), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)(a1 + 72));
    KeAbPostRelease((PVOID)(a1 + 72));
    CmpUnlockRegistry();
  }
}

Referenced by:

HvWriteHivePrimaryFile