PopGetWakeSource
__int64 __fastcall PopGetWakeSource(_DWORD *a1, unsigned int *a2){
unsigned int *v2;
unsigned __int64 v3;
_DWORD *v4;
__int64 v5;
INT64 v6;
unsigned int CurrentWakeInfos;
_POP_WAKE_SOURCE *v8;
_POP_WAKE_SOURCE *v9;
__int64 *v10;
__int64 v11;
unsigned __int64 v12;
__int64 v13;
__int64 v14;
_POP_WAKE_SOURCE **v15;
unsigned int v16;
__int64 v18;
__int64 v19;
__int64 *v20;
_DWORD *v21;
__int64 v22;
_DWORD *v23;
_QWORD *v24;
UINT64 v25;
_POP_WAKE_SOURCE **v26;
_DWORD *v27;
_QWORD *v28;
unsigned __int64 v29;
__int64 v30;
int v31;
unsigned int v33;
__int64 *v34;
v31 = (int)a1;
v34 = 0i64;
v2 = a2;
v3 = *a2;
v4 = a1;
if( (_DWORD)v3 && !a1 )
return 3221225485i64;
KeWaitForSingleObject((UINT64)&stru_140C23628 + 2936, 0, 0, 0, 0i64);
CurrentWakeInfos = PopGetCurrentWakeInfos(&v34, v5, v6);
v10 = v34;
v11 = CurrentWakeInfos;
v33 = CurrentWakeInfos;
v12 = (int)(4 * CurrentWakeInfos + 4);
if( CurrentWakeInfos )
{
v13 = (__int64)v34;
v14 = CurrentWakeInfos;
do
{
v8 = *(_POP_WAKE_SOURCE **)v13;
v15 = (_POP_WAKE_SOURCE **)(*(_QWORD *)v13 + 24i64);
v9 = *v15;
v12 = 4 * *(_DWORD *)(*(_QWORD *)v13 + 40i64) + 4 + ((v12 + 7) & 0xFFFFFFFFFFFFFFF8ui64);
while( v9 != (_POP_WAKE_SOURCE *)v15 )
{
v25 = PopWakeSourceSize(v9);
v9 = *v26;
v12 = v25 + ((v12 + 7) & 0xFFFFFFFFFFFFFFF8ui64);
}
v13 += 8i64;
--v14;
}
while( v14 );
}
if( v12 <= v3 )
{
*v4 = v11;
v30 = v11;
v18 = (__int64)&v4[v11 + 1];
v19 = v11;
if( (_DWORD)v11 )
{
v20 = v10;
v21 = v4 + 1;
do
{
v22 = *v20;
v23 = (_DWORD *)((v18 + 7) & 0xFFFFFFFFFFFFFFF8ui64);
*v23 = *(_DWORD *)(*v20 + 40);
*v21 = ((v18 + 7) & 0xFFFFFFF8) - (_DWORD)v4;
v18 = (__int64)&v23[*(unsigned int *)(v22 + 40) + 1];
v24 = *(_QWORD **)(v22 + 24);
if( v24 != (_QWORD *)(v22 + 24) )
{
v27 = v23 + 1;
v28 = (_QWORD *)(v22 + 24);
do
{
v29 = (v18 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
*v27++ = v29 - (_DWORD)v23;
PopCopyWakeSource((UINT8 *)v29, v8);
v24 = (_QWORD *)*v24;
v18 = *(unsigned int *)(v29 + 4) + v29;
}
while( v24 != v28 );
LODWORD(v4) = v31;
v19 = v30;
}
++v20;
++v21;
v30 = --v19;
}
while( v19 );
LODWORD(v11) = v33;
v10 = v34;
}
v2 = a2;
v16 = 0;
}
else
{
v16 = -1073741789;
}
if( (_DWORD)v11 )
PopDereferenceWakeInfos(v11, v10, (INT64)v9);
*v2 = v12;
return v16;
}Referenced by:
No references.