ViDdiBuildWmiRegInfoData
UINT64 __stdcall ViDdiBuildWmiRegInfoData(UINT64 Datapath, WMIREGINFOW *WmiRegInfo){
UINT64 result;
unsigned int v4;
char *v5;
if( WmiRegInfo )
{
WmiRegInfo->GuidCount = 1;
WmiRegInfo->WmiRegGuid[0].InstanceCount = 0;
WmiRegInfo->WmiRegGuid[0].InstanceNameList = 0;
*(_QWORD *)&WmiRegInfo->WmiRegGuid[1].Guid.Data1 = 0i64;
*(GUID *)&WmiRegInfo->WmiRegGuid[0].Guid.Data2 = GUID_VERIFIER_WMI_INTERFACE;
}
result = 56i64;
if( !(_DWORD)Datapath )
{
if( WmiRegInfo )
{
WmiRegInfo->RegistryPath = 56;
*(_WORD *)WmiRegInfo->WmiRegGuid[1].Guid.Data4 = ViDdiWmiMofKey.Length;
*(_WORD *)&WmiRegInfo->WmiRegGuid[1].Guid.Data4[2] = ViDdiWmiMofKey.Length;
*(_QWORD *)&WmiRegInfo->WmiRegGuid[1].Flags = &WmiRegInfo->WmiRegGuid[1].InstanceNameList;
memmove(&WmiRegInfo->WmiRegGuid[1].InstanceNameList, ViDdiWmiMofKey.Buffer, ViDdiWmiMofKey.Length);
}
v4 = (ViDdiWmiMofKey.Length + 73) & 0xFFFFFFFE;
if( WmiRegInfo )
{
WmiRegInfo->MofResourceName = v4;
v5 = (char *)WmiRegInfo + v4;
*(_WORD *)v5 = ViDdiWmiMofResourceName.Length;
*((_WORD *)v5 + 1) = ViDdiWmiMofResourceName.Length;
*((_QWORD *)v5 + 1) = v5 + 16;
memmove(v5 + 16, ViDdiWmiMofResourceName.Buffer, ViDdiWmiMofResourceName.Length);
}
result = v4 + ViDdiWmiMofResourceName.Length + 16;
}
if( WmiRegInfo )
{
WmiRegInfo->NextWmiRegInfo = 0;
WmiRegInfo->BufferSize = result;
}
return result;
}Referenced by:
ViDdiDispatchWmiRegInfoEx