sub_14065DA88

__int64 __fastcall sub_14065DA88(__int64 a1, __int64 a2){
  _ETHREAD *CurrentThread; 
  UINT64 *v5; 
  _BYTE *v6; 
  _BYTE *v7; 
  int v8; 
  INT64 v9; 
  int v10; 
  INT64 a5; 
  INT64 v13; 
  INT64 a4; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v13 = 0i64;
  --*((_WORD *)CurrentThread + 243);
  v5 = (UINT64 *)(a1 + 224);
  LODWORD(v6) = KeAbPreAcquire((PVOID)(a1 + 224), 0i64, 0i64);
  v7 = v6;
  if( _InterlockedCompareExchange64((volatile signed __int64 *)v5, 17i64, 0i64) )
    ExfAcquirePushLockSharedEx(v5, v6, v5);
  if( v7 )
    v7[26] |= 1u;
  a4 = 0i64;
  v8 = sub_14065EB58(a1 + 184, a2, 8ui64, &a4, &a5);
  v9 = v13;
  v10 = v8;
  if( v8 >= 0 )
    v9 = a4;
  v13 = v9;
  if( _InterlockedCompareExchange64((volatile signed __int64 *)v5, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)v5);
  KeAbPostRelease(v5);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  if( v10 >= 0 )
    return(unsigned int)WbFreeMemoryBlockRegion(v13, a2);
  return(unsigned int)v10;
}

Referenced by:

sub_14065EF2C