WmipEnumerateGuids

__int64 __fastcall WmipEnumerateGuids(int a1, _DWORD *a2, int a3, _DWORD *a4){
  __int64 v5; 
  int v8; 
  unsigned int v9; 
  _QWORD **v10; 
  _QWORD *i; 
  __int64 v12; 
  _QWORD *v13; 
  __int64 result; 
  v5 = 0i64;
  v8 = 0;
  v9 = (a3 - 8) / 0x24u;
  KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
  v10 = (_QWORD **)WmipGEHeadPtr;
  for( i = *(_QWORD **)WmipGEHeadPtr; i != v10; i = (_QWORD *)*i )
  {
    ++v8;
    if( (unsigned int)v5 < v9 )
    {
      v12 = 9 * v5;
      v5 = (unsigned int)(v5 + 1);
      *(_OWORD *)&a2[v12 + 2] = *(_OWORD *)(i + 9);
    }
  }
  if( a1 == 2244960 )
  {
    v13 = *v10;
    v8 = 0;
    v5 = 0i64;
    while( v13 != v10 )
    {
      ++v8;
      if( (unsigned int)v5 < v9 )
      {
        WmipGetGuidPropertiesFromGuidEntry((__int64)&a2[8 * v5 + 2 + (unsigned int)v5], (__int64)v13);
        v5 = (unsigned int)(v5 + 1);
      }
      v13 = (_QWORD *)*v13;
    }
  }
  KeReleaseMutex(&WmipSMMutex, 0);
  *a4 = 36 * v5 + 8;
  result = 0i64;
  *a2 = v8;
  a2[1] = v5;
  return result;
}

Referenced by:

WmipIoControl