WmipProcessWmiRegInfo
NTSTATUS __stdcall WmipProcessWmiRegInfo(_REGENTRY *RegEntry, WMIREGINFOW *WmiRegInfo, UINT64 BufferSize, UINT8 Update){
NTSTATUS v4;
unsigned int v6;
WMIREGINFOW *v7;
int v9;
UINT64 v10;
int v11;
NTSTATUS updated;
int v13;
__int64 NextWmiRegInfo;
WCHAR *String;
WCHAR *ResourceName;
v4 = 0;
v6 = BufferSize;
v7 = WmiRegInfo;
String = 0i64;
v9 = 0;
ResourceName = 0i64;
if( WmiRegInfo->BufferSize > (unsigned int)BufferSize )
{
LABEL_17:
v11 = -1073741811;
}
else
{
while( 1 )
{
v11 = WmipValidateWmiRegInfoString(v7, v6, v7->RegistryPath, &String);
if( v11 < 0 )
break;
v11 = WmipValidateWmiRegInfoString(v7, v10, v7->MofResourceName, &ResourceName);
if( v11 < 0 )
break;
if( 32 * v7->GuidCount + 24 > v6 )
goto LABEL_17;
if( Update )
updated = WmipUpdateDataSource(RegEntry, v7, v6);
else
updated = WmipAddDataSource(RegEntry, v7, v6, String, ResourceName);
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 v11;
return v4;
}Referenced by:
WmipRegisterOrUpdateDS