ExpWnfGenerateStateName

NTSTATUS __stdcall ExpWnfGenerateStateName(
        _WNF_STATE_NAME_STRUCT *StateName,
        _WNF_STATE_NAME_LIFETIME NameLifetime,
        _WNF_DATA_SCOPE DataScope,
        UINT8 PersistData){
  char v5; 
  _EJOB *v8; 
  _EJOB *CurrentServerSilo; 
  _ESERVERSILO_GLOBALS *CurrentServerSiloGlobals; 
  signed __int64 v11; 
  bool v12; 
  __int64 v13; 
  NTSTATUS result; 
  _KSPIN_LOCK *v15; 
  __int64 SequenceNumber[3]; 

  SequenceNumber[0] = 0i64;
  v5 = DataScope;
  if( (unsigned int)(DataScope - 4) > 1 )
  {
    CurrentServerSilo = PsGetCurrentServerSilo();
    CurrentServerSiloGlobals = PsGetCurrentServerSiloGlobals(v15);
  }
  else
  {
    LODWORD(v8) = HalSystemVectorDispatchEntry(
                    (UINT32)StateName,
                    *(PKINTERRUPT_ROUTINE ***)&NameLifetime,
                    *(PKINTERRUPT_ROUTINE **)&DataScope);
    CurrentServerSilo = v8;
    CurrentServerSiloGlobals = PsGetServerSiloGlobals(v8);
  }
  if( (unsigned int)(NameLifetime - 2) > 1 )
  {
    result = ExpWnfAllocateNextPersistentNameSequence(CurrentServerSilo, (UINT64 *)SequenceNumber);
    if( result < 0 )
      return result;
    v13 = SequenceNumber[0];
  }
  else
  {
    do
    {
      v11 = _InterlockedExchangeAdd64(&CurrentServerSiloGlobals->WnfSiloState.RuntimeNameSequenceNumber, 1ui64);
      v12 = v11 == -1;
      v13 = v11 + 1;
      SequenceNumber[0] = v13;
    }
    while( v12 );
  }
  if( (v13 & 0xFFE0000000000000ui64) != 0 )
    return -1073741823;
  StateName->_bf_0 = (16 * ((v13 << 7) | NameLifetime & 3)) | (PersistData != 0 ? 0x400 : 0) | ((v5 & 0xF) << 6) & 0x7FEu | 1;
  return 0;
}

Referenced by:

NtCreateWnfStateName