ExpPrepareToWakeResourceExclusive

NTSTATUS __stdcall ExpPrepareToWakeResourceExclusive(INT64 a1, INT64 *a2, INT64 *a3, INT64 *a4){
  INT64 v4; 
  INT64 v6; 
  int v8; 
  NTSTATUS result; 
  INT64 v10; 

  v4 = a1;
  v6 = 0i64;
  v10 = 0i64;
  if( *(_DWORD *)(v4 + 72) )
  {
    *a2 = *(_QWORD *)(v4 + 32);
    v8 = *(_DWORD *)(v4 + 72);
    *(_DWORD *)(v4 + 72) = 0;
    *(_QWORD *)(v4 + 32) = 0i64;
  }
  else
  {
    if( *(_DWORD *)(v4 + 76) )
    {
      KeCaptureWaitChainHeadEx((_QWORD **)(v4 + 40), a2, &v10);
      --*(_DWORD *)(v4 + 76);
      v8 = 1;
      v6 = v10;
      goto LABEL_8;
    }
    *a2 = 0i64;
    v8 = 0;
  }
  *(_WORD *)(v4 + 26) &= ~0x80u;
  if( v8 )
  {
LABEL_8:
    result = v8 + *(_DWORD *)(v4 + 64) - 1;
    goto LABEL_6;
  }
  *(_WORD *)(v4 + 24) = 0;
  result = 0;
LABEL_6:
  *(_DWORD *)(v4 + 64) = result;
  *(_DWORD *)a4 = v8;
  *a3 = v6;
  return result;
}

Referenced by:

ExpReleaseDisownedFastResourceExclusive
ExpReleaseFastResourceExclusive