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