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.