WmipProcessWmiRegInfo
INT64 __fastcall WmipProcessWmiRegInfo(INT64 a1, UINT64 *a2, UINT64 a3, CHAR a4){
unsigned int v4;
unsigned int v6;
WMIREGINFOW *v7;
int v9;
UINT64 v10;
int v11;
int updated;
int v13;
__int64 NextWmiRegInfo;
WCHAR *String;
WCHAR *a5;
v4 = 0;
v6 = a3;
v7 = (WMIREGINFOW *)a2;
String = 0i64;
v9 = 0;
a5 = 0i64;
if( *(_DWORD *)a2 > (unsigned int)a3 )
{
LABEL_17:
v11 = -1073741811;
}
else
{
while( 1 )
{
v11 = WmipValidateWmiRegInfoString(v7, v6, v7->RegistryPath, &String);
if( v11 < 0 )
break;
v11 = WmipValidateWmiRegInfoString(v7, v10, v7->MofResourceName, &a5);
if( v11 < 0 )
break;
if( 32 * v7->GuidCount + 24 > v6 )
goto LABEL_17;
if( a4 )
updated = WmipUpdateDataSource(a1, (__int64)v7, v6);
else
updated = WmipAddDataSource(a1, v7, v6, String, a5);
v11 = updated;
v13 = v9 + 1;
if( v11 < 0 )
v13 = v9;
v9 = v13;
NextWmiRegInfo = v7->NextWmiRegInfo;
if( !(_DWORD)NextWmiRegInfo )
break;
if( v6 < (unsigned int)NextWmiRegInfo )
break;
v6 -= NextWmiRegInfo;
if( v6 < 0x18 )
break;
v7 = (WMIREGINFOW *)((char *)v7 + NextWmiRegInfo);
if( (WMIREGINFOW *)(((unsigned __int64)&v7->NextWmiRegInfo + 3) & 0xFFFFFFFFFFFFFFF8ui64) != v7 )
break;
if( v7->BufferSize > v6 )
goto LABEL_17;
}
}
if( !v9 )
return(unsigned int)v11;
return v4;
}Referenced by:
WmipRegisterOrUpdateDS