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