ExpRotateFastOwnerEntrySublistHead

_QWORD *__fastcall ExpRotateFastOwnerEntrySublistHead(__int64 a1, __int64 a2, char a3){
  _QWORD *v3; 
  _QWORD *v5; 
  __int64 v7; 
  char v8; 
  __int64 v9; 
  __int64 *v10; 
  _QWORD *v11; 
  __int64 v12; 
  __int64 v13; 
  _QWORD *v14; 
  _QWORD *result; 
  _QWORD *v16; 

  v3 = (_QWORD *)(a2 + 40);
  v5 = *(_QWORD **)(a2 + 40);
  if( v5[1] != a2 + 40 )
    goto LABEL_6;
  v7 = *v5;
  if( *(_QWORD **)(*v5 + 8i64) != v5 )
    goto LABEL_6;
  *v3 = v7;
  *(_QWORD *)(v7 + 8) = v3;
  *((_BYTE *)v5 + 18) = 1;
  v8 = *(_BYTE *)(a2 + 16);
  *(_BYTE *)(a2 + 18) = 0;
  *((_BYTE *)v5 + 16) = v8;
  *(_BYTE *)(a2 + 16) = 0;
  ExpReplaceListEntry((_QWORD *)a2, v5);
  ExpReplaceListEntry(v3, (_QWORD *)(v9 + 40));
  v13 = *v10;
  if( *(__int64 **)(*v10 + 8) != v10 )
    goto LABEL_6;
  v11[1] = v10;
  *v11 = v13;
  *(_QWORD *)(v13 + 8) = v11;
  *v10 = (__int64)v11;
  v14 = (_QWORD *)(v12 + 56);
  if( a3 )
    return ExpReplaceListEntry(v11 + 7, v14);
  ++*(_DWORD *)(a1 + 64);
  result = (_QWORD *)(a1 + 48);
  v16 = *(_QWORD **)(a1 + 56);
  if( *v16 != a1 + 48 )
LABEL_6:
    __fastfail(3u);
  *v14 = result;
  *(_QWORD *)(v12 + 64) = v16;
  *v16 = v14;
  *(_QWORD *)(a1 + 56) = v14;
  return result;
}

Referenced by:

ExDisownFastResource
ExpReleaseDisownedFastResourceExclusive
ExpReleaseDisownedFastResourceShared
ExpReleaseFastResourceExclusive
ExpReleaseFastResourceShared