SmpFpReleaseResource

UINT64 __stdcall SmpFpReleaseResource(
        _SM_FORWARD_PROGRESS_CTX *FpContext,
        _SM_FP_RESOURCE_TYPE ResourceType,
        VOID *Resource){
  __int64 v4; 
  unsigned __int8 v6; 
  _QWORD *v7; 
  unsigned __int64 v8; 
  unsigned int v9; 

  v4 = ResourceType;
  v6 = ExAcquireSpinLockExclusive((INT64 *)FpContext);
  v7 = *(_QWORD **)&FpContext[2 * v4 + 8];
  v8 = v6;
  while( 1 )
  {
    if( !v7 )
    {
      v9 = 0;
      goto LABEL_6;
    }
    if( (VOID *)(v7[1] & 0xFFFFFFFFFFFFFFF8ui64) == Resource )
      break;
    v7 = (_QWORD *)*v7;
  }
  *((_DWORD *)v7 + 2) &= ~1u;
  --*((_BYTE *)FpContext + v4 + 80);
  v9 = 1;
  --*((_BYTE *)FpContext + 86);
LABEL_6:
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)FpContext);
  __writecr8(v8);
  return v9;
}

Referenced by:

SmFpFree