PopFxLogSocSubsystemMetadata
INT64 __stdcall PopFxLogSocSubsystemMetadata(UINT8 ScenarioInstanceId, UINT64 PlatformIdleStateIndex, UINT64 Flags){
int v3;
unsigned int v4;
INT64 v5;
INT64 v6;
unsigned int v7;
__int64 v8;
__int64 v9;
char *PoolWithTag;
char *v11;
unsigned int v12;
unsigned int i;
__int64 v14;
__int64 v15;
_DWORD *v16;
_DWORD *v17;
INT64 v18;
__int64 v19;
__int64 v20;
unsigned int j;
char *v22;
EVENT_DATA_DESCRIPTOR *v23;
char *v24;
EVENT_DATA_DESCRIPTOR *UserData;
unsigned int v26;
unsigned int v27;
__int64 v28;
__int64 v29;
__int64 v30;
unsigned int v31;
__int64 v32;
unsigned int v33;
__int64 v34;
__int64 v35;
unsigned int v36;
__int64 v37;
bool v38;
UINT64 v39;
UINT64 v41;
unsigned int v42;
int v43;
int v44;
int v45;
ULONG UserDataCount;
v45 = Flags;
v44 = PlatformIdleStateIndex;
v43 = v3;
v42 = 0;
v4 = 0;
v41 = PopWnfCsEnterScenarioId;
LOBYTE(v45) = 0;
v5 = PopFxLookupSocSubsystemsByPlatformIdleState((unsigned int)PlatformIdleStateIndex);
v6 = v5;
if( v5 )
{
v7 = 0;
if( !*(_DWORD *)(v5 + 20) )
return v4;
while( 1 )
{
v8 = 344i64 * v7;
v9 = *(unsigned int *)(v8 + v6 + 104);
v42 = v9;
if( !(_DWORD)v9 )
goto LABEL_28;
PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, 296 * v9, 0x4D584650ui64);
v11 = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741670;
memset((INT64)PoolWithTag, 0i64);
v12 = v42;
for( i = 0; i < v42; v12 = v42 )
{
v14 = i++;
v15 = 296 * v14;
*(_QWORD *)&v11[v15 + 8] = &v11[296 * v14 + 32];
*(_WORD *)&v11[v15 + 2] = 128;
*(_QWORD *)&v11[v15 + 24] = &v11[296 * v14 + 164];
*(_WORD *)&v11[v15 + 18] = 128;
*(_DWORD *)&v11[v15 + 160] = -1430541637;
*(_DWORD *)&v11[v15 + 292] = -1430541637;
}
v16 = ExAllocatePoolWithTag(PagedPool, (int)(8 * v12 + 32), 0x4D584650ui64);
v17 = v16;
if( !v16 )
break;
memset((INT64)v16, 0i64);
v19 = 0i64;
*v17 = v44;
v20 = *(_QWORD *)(v8 + v6 + 64);
v17[6] = 0;
*((_QWORD *)v17 + 1) = v20;
*((_QWORD *)v17 + 2) = v8 + v6 + 40;
for( v17[7] = v42; (unsigned int)v19 < v42; v19 = (unsigned int)(v19 + 1) )
{
v18 = (unsigned int)v19;
*(_QWORD *)&v17[2 * v19 + 8] = &v11[296 * (unsigned int)v19];
}
if( (unsigned __int8)PopPluginQuerySocSubsystemMetadata(v18, *(unsigned int *)(v8 + v6 + 60), (INT64)v17) )
{
for( j = 0; j < v42; ++j )
{
v22 = &v11[296 * j];
if( *((_DWORD *)v22 + 40) != -1430541637 )
PopFxBugCheck(0x706ui64, 0x28ui64, 0x4B657920ui64, *((unsigned __int16 *)v22 + 1));
if( *((_DWORD *)v22 + 73) != -1430541637 )
PopFxBugCheck(0x706ui64, 0x28ui64, 0x56616C75ui64, *((unsigned __int16 *)v22 + 9));
}
UserDataCount = v42 + 4 * v42 + 3;
v23 = (EVENT_DATA_DESCRIPTOR *)ExAllocatePoolWithTag(PagedPool, 16i64 * UserDataCount, 0x4D584650ui64);
UserData = v23;
if( !v23 )
break;
v26 = 2;
LOBYTE(v45) = v41;
v27 = 0;
*(_QWORD *)&v23->Size = 1i64;
v23->Ptr = (unsigned __int64)&v45;
v23[1].Ptr = (unsigned __int64)&v42;
for( *(_QWORD *)&v23[1].Size = 4i64; v27 < v42; *(_QWORD *)&UserData[v35].Size = v36 )
{
v28 = v26;
UserData[v28].Ptr = v8 + v6 + 72;
*(_QWORD *)&UserData[v28].Size = 16i64;
v29 = v27++;
v24 = &v11[296 * v29];
*((_DWORD *)v24 + 40) = *(unsigned __int16 *)v24 >> 1;
v30 = v26 + 1;
v31 = v26 + 2;
v30 *= 2i64;
v32 = v31;
*(&UserData->Ptr + v30) = (unsigned __int64)(v24 + 160);
*((_QWORD *)&UserData->Size + v30) = 4i64;
v33 = *(unsigned __int16 *)v24;
UserData[v32].Ptr = *((_QWORD *)v24 + 1);
UserData[v32].Size = v33;
UserData[v32].Reserved = 0;
*((_DWORD *)v24 + 73) = *((unsigned __int16 *)v24 + 8) >> 1;
v34 = v31 + 1;
v31 += 2;
v34 *= 2i64;
v35 = v31;
v26 = v31 + 1;
*(&UserData->Ptr + v34) = (unsigned __int64)(v24 + 292);
*((_QWORD *)&UserData->Size + v34) = 4i64;
v36 = *((unsigned __int16 *)v24 + 8);
UserData[v35].Ptr = *((_QWORD *)v24 + 3);
}
v37 = v26;
v38 = PopDiagSleepStudyHandleRegistered == 0;
UserData[v37].Ptr = (unsigned __int64)&v41;
*(_QWORD *)&UserData[v37].Size = 8i64;
if( !v38 )
{
v39 = PopDiagSleepStudyHandle;
if( EtwEventEnabled(
PopDiagSleepStudyHandle,
(EVENT_DESCRIPTOR *)&SLEEPSTUDY_EVT_SCENARIO_BLOCKER_DATA,
(EVENT_DESCRIPTOR *)v24) )
{
EtwWrite(v39, (EVENT_DESCRIPTOR *)&SLEEPSTUDY_EVT_SCENARIO_BLOCKER_DATA, 0i64, UserDataCount, UserData);
}
}
ExFreePoolWithTag(UserData, 0x4D584650u);
}
else
{
v4 = -1073741595;
}
LABEL_25:
ExFreePoolWithTag(v11, 0x4D584650u);
if( v17 )
ExFreePoolWithTag(v17, 0x4D584650u);
if( (v4 & 0x80000000) != 0 )
return v4;
LABEL_28:
if( ++v7 >= *(_DWORD *)(v6 + 20) )
return v4;
}
v4 = -1073741670;
goto LABEL_25;
}
return(unsigned int)-1073741584;
}Referenced by:
PopCaptureSleepStudyStatistics