SmpFpAllocateResource

VOID *__stdcall SmpFpAllocateResource(_SM_FORWARD_PROGRESS_CTX *FpContext, _SM_FP_RESOURCE_TYPE ResourceType){
  __int64 v2; 
  unsigned __int8 v4; 
  __int64 *v5; 
  unsigned __int64 v6; 
  __int64 i; 
  VOID *v8; 

  v2 = ResourceType;
  v4 = ExAcquireSpinLockExclusive((INT64 *)FpContext);
  v5 = *(__int64 **)&FpContext[2 * v2 + 8];
  v6 = v4;
  for( i = v2; (v5[1] & 1) != 0; v5 = (__int64 *)*v5 )
    ;
  v8 = (VOID *)v5[1];
  *((_DWORD *)v5 + 2) |= 1u;
  ++*((_BYTE *)FpContext + i + 80);
  ++*((_BYTE *)FpContext + 86);
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)FpContext);
  __writecr8(v6);
  return v8;
}

Referenced by:

SmpFpWaitForResource