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