ExpSetSoftRebootFlags

NTSTATUS __stdcall ExpSetSoftRebootFlags(
        VOID *AtomTableHandle,
        UINT16 Atom,
        UINT64 *AtomUsage,
        UINT64 *AtomFlags,
        WCHAR *AtomName,
        UINT64 *AtomNameLength){
  int v6; 
  __int32 v7; 
  int v9; 
  signed __int32 *i; 
  signed __int32 v11; 
  __int32 v12; 
  int v13; 
  __int64(__fastcall *v14)(_QWORD, _QWORD); 
  NTSTATUS v15; 
  int v16; 
  __int64 v17; 
  _QWORD v18[13]; 
  int v19; 
  int v20; 
  NTSTATUS(__stdcall *v21)(INT64, INT64); 
  int v22; 
  int v23; 
  __int64 v24; 
  int v25; 
  int v26; 
  NTSTATUS(__stdcall *v27)(INT64, INT64); 
  int v28; 
  int v29; 
  NTSTATUS(__stdcall *v30)(INT64, INT64); 
  int v31; 
  int v32; 
  __int64(__fastcall *v33)(unsigned int, int); 
  int v34; 
  int v35; 
  __int64 v36; 
  int v37; 
  int v38; 
  NTSTATUS(__stdcall *v39)(INT64, INT64); 
  int v40; 
  int v41; 
  NTSTATUS(__stdcall *v42)(INT64, INT64); 
  __int64 v43; 
  __int64 v44; 

  v17 = 0i64;
  v18[0] = 0i64;
  v18[4] = BapdpKsrCompleteScenarioPhase0;
  v6 = (int)AtomTableHandle;
  v18[1] = 0x800000000i64;
  v18[2] = BapdpKsrInitiateScenarioPhase0;
  v18[3] = 0x1000000008i64;
  v18[6] = BapdpKsrCancelScenario;
  v18[12] = BapdpKsrCancelScenario;
  v21 = BapdpKsrCompleteScenario;
  v33 = BapdpKsrComplete;
  v18[5] = 8i64;
  v18[7] = 0x1000000000i64;
  v18[8] = BapdpKsrpInitiateScenario;
  v18[9] = 0x1000000010i64;
  v18[10] = 0i64;
  v18[11] = 16i64;
  v19 = 16;
  v20 = 2;
  v22 = 0;
  v23 = 1;
  v24 = 0i64;
  v25 = 2;
  v26 = 8;
  v27 = BapdpKsrInitiateScenarioPhase0;
  v28 = 2;
  v29 = 16;
  v30 = BapdpKsrpInitiateScenario;
  v31 = 2;
  v32 = 1;
  v34 = 1;
  v35 = 1;
  v36 = 0i64;
  v37 = 1;
  v38 = 8;
  v39 = BapdpKsrInitiateScenarioPhase0;
  v40 = 1;
  v41 = 16;
  v42 = BapdpKsrpInitiateScenario;
  v43 = 1i64;
  v44 = 0i64;
  v7 = (unsigned int)AtomTableHandle & 0x8000001B;
  if( (int)AtomTableHandle < 0 )
    return -1073741811;
  v9 = 0;
  for( i = (signed __int32 *)&v17; ; i += 4 )
  {
    if( v7 == i[1] )
    {
      v11 = *i;
      v12 = _InterlockedCompareExchange(&ExSoftRebootState, (unsigned __int8)AtomTableHandle & 0x1B | 0x80000000, *i);
      if( v11 == v12 )
        break;
    }
    if( (unsigned int)++v9 >= 0x10 )
      return -1073700861;
  }
  _m_prefetchw(&ExSoftRebootFlags);
  v13 = ExSoftRebootFlags;
  v14 = (__int64(__fastcall *)(_QWORD, _QWORD))v18[2 * v9];
  if( v14 )
    v15 = v14((unsigned int)ExSoftRebootFlags, (unsigned int)AtomTableHandle);
  else
    v15 = 0;
  v16 = ExSoftRebootFlags & 0x7CFFFFE4;
  if( v15 < 0 )
  {
    ExSoftRebootFlags = v16 | v13 & 0x8300001B;
    _InterlockedExchange(&ExSoftRebootState, v12);
  }
  else
  {
    ExSoftRebootFlags = v16 | v6 & 0x8300001B;
    _InterlockedExchange(&ExSoftRebootState, v7);
  }
  return v15;
}

Referenced by:

NtSetSystemInformation