ViDdiBuildWmiRegInfoData

UINT64 __stdcall ViDdiBuildWmiRegInfoData(UINT64 Datapath, WMIREGINFOW *WmiRegInfo){
  UINT64 result; 
  unsigned int v4; 
  char *v5; 
  if( WmiRegInfo )
  {
    WmiRegInfo->GuidCount = 1;
    WmiRegInfo->WmiRegGuid[0].Flags = 0;
    WmiRegInfo->WmiRegGuid[0].InstanceCount = 0;
    WmiRegInfo->WmiRegGuid[0].Pdo = 0i64;
    WmiRegInfo->WmiRegGuid[0].Guid = GUID_VERIFIER_WMI_INTERFACE;
  }
  result = 56i64;
  if( !(_DWORD)Datapath )
  {
    if( WmiRegInfo )
    {
      WmiRegInfo->RegistryPath = 56;
      LOWORD(WmiRegInfo->WmiRegGuid[1].Guid.Data1) = ViDdiWmiMofKey.Length;
      HIWORD(WmiRegInfo->WmiRegGuid[1].Guid.Data1) = ViDdiWmiMofKey.Length;
      *(_QWORD *)WmiRegInfo->WmiRegGuid[1].Guid.Data4 = &WmiRegInfo->WmiRegGuid[1].Flags;
      memmove((UINT8 *)&WmiRegInfo->WmiRegGuid[1].Flags, (UINT8 *)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((UINT8 *)v5 + 16, (UINT8 *)ViDdiWmiMofResourceName.Buffer, ViDdiWmiMofResourceName.Length);
    }
    result = v4 + ViDdiWmiMofResourceName.Length + 16;
  }
  if( WmiRegInfo )
  {
    WmiRegInfo->NextWmiRegInfo = 0;
    WmiRegInfo->BufferSize = result;
  }
  return result;
}

Referenced by:

ViDdiDispatchWmiRegInfoEx