ExpPrepareToWaitForResourceExclusive

INT64 __fastcall ExpPrepareToWaitForResourceExclusive(INT64 a1, INT64 a2, INT64 a3){
  INT64 result; 
  INT64 *v4; 
  ++*(_DWORD *)(a1 + 76);
  *(_OWORD *)a3 = 0i64;
  *(_OWORD *)(a3 + 16) = 0i64;
  *(_OWORD *)(a3 + 32) = 0i64;
  *(_QWORD *)(a3 + 16) = a2;
  *(_DWORD *)(a3 + 28) = 0;
  *(_WORD *)(a3 + 24) = 1;
  *(_BYTE *)(a3 + 26) = 6;
  *(_QWORD *)(a3 + 40) = a3 + 32;
  *(_QWORD *)(a3 + 32) = a3 + 32;
  result = *(_QWORD *)(a1 + 40);
  if( result )
  {
    v4 = *(INT64 **)(result + 8);
    if( *v4 != result )
      __fastfail(3u);
    *(_QWORD *)a3 = result;
    *(_QWORD *)(a3 + 8) = v4;
    *v4 = a3;
    *(_QWORD *)(result + 8) = a3;
  }
  else
  {
    *(_QWORD *)(a3 + 8) = a3;
    *(_QWORD *)a3 = a3;
    *(_QWORD *)(a1 + 40) = a3;
  }
  return result;
}

Referenced by:

ExAcquireFastResourceExclusive
ExAcquireResourceExclusiveLite