WmipEnumerateMofResources
__int64 __fastcall WmipEnumerateMofResources(unsigned int *a1, unsigned int 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 = a2;
KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
v6 = 0;
v7 = 0i64;
v8 = (_QWORD *)**(&ExBootDevicesRemovedEvent + 398);
if( **(&ExBootDevicesRemovedEvent + 398) == *(&ExBootDevicesRemovedEvent + 398) )
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 *)*(&ExBootDevicesRemovedEvent + 398);
v7 += 2 * (v11 + v9) + 4;
}
while( v8 != (_QWORD *)*(&ExBootDevicesRemovedEvent + 398) );
if( !v6 )
{
LABEL_17:
*a1 = 0;
LODWORD(v15) = 16;
}
else
{
v13 = v4;
v14 = 12 * v10 + 16;
v15 = v14 + v7;
if( v4 < v15 )
{
*a1 = v15;
LODWORD(v15) = 4;
}
else
{
*a1 = v6;
v16 = 0;
v17 = (_QWORD *)*v12;
if( (_QWORD *)*v12 != v12 )
{
do
{
v18 = v16++;
v19 = 3 * v18;
LODWORD(v18) = v17[2] & 1;
a1[v19 + 1] = v14;
a1[v19 + 3] = v18;
RtlStringCbCopyW((WCHAR *)((char *)a1 + v14), v13 - v14, (WCHAR *)v17[5]);
v20 = -1i64;
do
++v20;
while( *(_WORD *)(v17[5] + 2 * v20) );
v21 = v14 + 2 * v20 + 2;
a1[v19 + 2] = v21;
RtlStringCbCopyW((WCHAR *)((char *)a1 + v21), v13 - v21, (WCHAR *)v17[6]);
v22 = -1i64;
do
++v22;
while( *(_WORD *)(v17[6] + 2 * v22) );
v17 = (_QWORD *)*v17;
v14 = v21 + 2 * v22 + 2;
}
while( v17 != (_QWORD *)*(&ExBootDevicesRemovedEvent + 398) );
}
}
}
*a3 = v15;
KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
return 0i64;
}Referenced by:
WmipIoControl