WmipEnumerateMofResources

INT64 __fastcall WmipEnumerateMofResources(UINT64 *a1, UINT64 a2, _DWORD *a3){
  unsigned __int64 v4; 
  unsigned int v6; 
  __int64 v7; 
  _QWORD *v8; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  _QWORD *v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  unsigned int v16; 
  _QWORD *v17; 
  __int64 v18; 
  __int64 v19; 
  __int64 v20; 
  __int64 v21; 
  __int64 v22; 
  v4 = (unsigned int)a2;
  KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
  v6 = 0;
  v7 = 0i64;
  v8 = *(_QWORD **)WmipMRHeadPtr;
  if( *(_QWORD *)WmipMRHeadPtr == WmipMRHeadPtr )
    goto LABEL_17;
  do
  {
    v9 = -1i64;
    v10 = v6++;
    do
      ++v9;
    while( *(_WORD *)(v8[6] + 2 * v9) );
    v11 = -1i64;
    do
      ++v11;
    while( *(_WORD *)(v8[5] + 2 * v11) );
    v8 = (_QWORD *)*v8;
    v12 = (_QWORD *)WmipMRHeadPtr;
    v7 += 2 * (v11 + v9) + 4;
  }
  while( v8 != (_QWORD *)WmipMRHeadPtr );
  if( !v6 )
  {
LABEL_17:
    *(_DWORD *)a1 = 0;
    LODWORD(v15) = 16;
  }
  else
  {
    v13 = v4;
    v14 = 12 * v10 + 16;
    v15 = v14 + v7;
    if( v4 < v15 )
    {
      *(_DWORD *)a1 = v15;
      LODWORD(v15) = 4;
    }
    else
    {
      *(_DWORD *)a1 = v6;
      v16 = 0;
      v17 = (_QWORD *)*v12;
      if( (_QWORD *)*v12 != v12 )
      {
        do
        {
          v18 = v16++;
          v19 = 3 * v18;
          LODWORD(v18) = v17[2] & 1;
          *((_DWORD *)a1 + v19 + 1) = v14;
          *((_DWORD *)a1 + v19 + 3) = v18;
          RtlStringCbCopyW((PWCHAR)((char *)a1 + v14), v13 - v14, (PWCHAR)v17[5]);
          v20 = -1i64;
          do
            ++v20;
          while( *(_WORD *)(v17[5] + 2 * v20) );
          v21 = v14 + 2 * v20 + 2;
          *((_DWORD *)a1 + v19 + 2) = v21;
          RtlStringCbCopyW((PWCHAR)((char *)a1 + v21), v13 - v21, (PWCHAR)v17[6]);
          v22 = -1i64;
          do
            ++v22;
          while( *(_WORD *)(v17[6] + 2 * v22) );
          v17 = (_QWORD *)*v17;
          v14 = v21 + 2 * v22 + 2;
        }
        while( v17 != (_QWORD *)WmipMRHeadPtr );
      }
    }
  }
  *a3 = v15;
  KeReleaseMutex(&WmipSMMutex, 0);
  return 0i64;
}

Referenced by:

WmipIoControl