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