static void AnnotateInterfaceRegistrationForHive(JSONWriter& aJson, HKEY aHive, REFIID aIid, const JSONWriter::CollectionStyle aStyle) { nsAutoString interfaceSubKey; interfaceSubKey.AppendLiteral(kSoftwareClasses); interfaceSubKey.AppendLiteral(kInterface); nsAutoString iid; GUIDToString(aIid, iid); interfaceSubKey.Append(iid); nsAutoString interfaceName; if (GetStringValue(aHive, interfaceSubKey, kDefaultValue, interfaceName)) { aJson.StringProperty("InterfaceName", NS_ConvertUTF16toUTF8(interfaceName).get()); } nsAutoString psSubKey(interfaceSubKey); psSubKey.AppendLiteral(kProxyStubClsid32); nsAutoString psClsid; if (GetStringValue(aHive, psSubKey, kDefaultValue, psClsid)) { aJson.StartObjectProperty("ProxyStub", aStyle); aJson.StringProperty("CLSID", NS_ConvertUTF16toUTF8(psClsid).get()); AnnotateClsidRegistrationForHive(aJson, aHive, psClsid, aStyle); aJson.EndObject(); } nsAutoString typelibSubKey(interfaceSubKey); typelibSubKey.AppendLiteral(kTypeLib); nsAutoString typelibId; bool haveTypelibId = GetStringValue(aHive, typelibSubKey, kDefaultValue, typelibId); nsAutoString typelibVersion; bool haveTypelibVersion = GetStringValue(aHive, typelibSubKey, kVersion, typelibVersion); if (haveTypelibId || haveTypelibVersion) { aJson.StartObjectProperty("TypeLib", aStyle); } if (haveTypelibId) { aJson.StringProperty("ID", NS_ConvertUTF16toUTF8(typelibId).get()); } if (haveTypelibVersion) { aJson.StringProperty("Version", NS_ConvertUTF16toUTF8(typelibVersion).get()); } if (haveTypelibId && haveTypelibVersion) { AnnotateTypelibRegistrationForHive(aJson, aHive, typelibId, typelibVersion, aStyle); } if (haveTypelibId || haveTypelibVersion) { aJson.EndObject(); } }
static void AnnotateTypelibRegistrationForHive(JSONWriter& aJson, HKEY aHive, const nsAString& aTypelibId, const nsAString& aTypelibVersion, const JSONWriter::CollectionStyle aStyle) { nsAutoString typelibSubKey; typelibSubKey.AppendLiteral(kSoftwareClasses); typelibSubKey.AppendLiteral(kTypeLib); typelibSubKey.AppendLiteral(kBackslash); typelibSubKey.Append(aTypelibId); typelibSubKey.AppendLiteral(kBackslash); typelibSubKey.Append(aTypelibVersion); nsAutoString typelibDesc; if (GetStringValue(aHive, typelibSubKey, kDefaultValue, typelibDesc)) { aJson.StringProperty("Description", NS_ConvertUTF16toUTF8(typelibDesc).get()); } nsAutoString flagsSubKey(typelibSubKey); flagsSubKey.AppendLiteral(kBackslash); flagsSubKey.AppendLiteral(kFlags); nsAutoString typelibFlags; if (GetStringValue(aHive, flagsSubKey, kDefaultValue, typelibFlags)) { aJson.StringProperty("Flags", NS_ConvertUTF16toUTF8(typelibFlags).get()); } HKEY rawTypelibKey; LONG result = RegOpenKeyEx(aHive, typelibSubKey.get(), 0, KEY_READ, &rawTypelibKey); if (result != ERROR_SUCCESS) { return; } nsAutoRegKey typelibKey(rawTypelibKey); const size_t kMaxLcidCharLen = 9; WCHAR keyName[kMaxLcidCharLen]; for (DWORD index = 0; result == ERROR_SUCCESS; ++index) { DWORD keyNameLength = ArrayLength(keyName); result = RegEnumKeyEx(typelibKey, index, keyName, &keyNameLength, nullptr, nullptr, nullptr, nullptr); unsigned long lcid; if (result == ERROR_SUCCESS && ConvertLCID(keyName, WrapNotNull(&lcid))) { nsDependentString strLcid(keyName, keyNameLength); aJson.StartObjectProperty(NS_ConvertUTF16toUTF8(strLcid).get(), aStyle); AnnotateTypelibPlatform(aJson, typelibKey, strLcid, kWin32, aStyle); #if defined(HAVE_64BIT_BUILD) AnnotateTypelibPlatform(aJson, typelibKey, strLcid, kWin64, aStyle); #endif aJson.EndObject(); } } }
static void AnnotateTypelibPlatform(JSONWriter& aJson, HKEY aBaseKey, const nsAString& aLcidSubkey, const char16_t (&aPlatform)[N], const JSONWriter::CollectionStyle aStyle) { nsLiteralString platform(aPlatform); nsAutoString fullSubkey(aLcidSubkey); fullSubkey.AppendLiteral(kBackslash); fullSubkey.Append(platform); nsAutoString tlbPath; if (GetStringValue(aBaseKey, fullSubkey, kDefaultValue, tlbPath)) { aJson.StartObjectProperty(NS_ConvertUTF16toUTF8(platform).get(), aStyle); aJson.StringProperty("Path", NS_ConvertUTF16toUTF8(tlbPath).get()); CheckTlbPath(aJson, tlbPath); aJson.EndObject(); } }