Browse Source

PackageName counter

(cherry picked from commit 0b71a67a0cbe73a2a3f2bca46fc9da074f822b0f)

Source commit: 851f47cdeb66f5b34162331cbbf566283d0c97c6
Martin Prikryl 3 years ago
parent
commit
efc0b60ad3
3 changed files with 35 additions and 9 deletions
  1. 33 9
      source/core/Common.cpp
  2. 1 0
      source/core/Common.h
  3. 1 0
      source/windows/WinMain.cpp

+ 33 - 9
source/core/Common.cpp

@@ -3022,24 +3022,48 @@ bool __fastcall IsWine()
 }
 //---------------------------------------------------------------------------
 int GIsUWP = -1;
+UnicodeString GPackageName;
 //---------------------------------------------------------------------------
-bool __fastcall IsUWP()
+static void NeedUWPData()
 {
   if (GIsUWP < 0)
   {
+    GIsUWP = 0;
+
     HINSTANCE Kernel32 = GetModuleHandle(kernel32);
-    typedef LONG WINAPI (* GetPackageFamilyNameProc)(HANDLE hProcess, UINT32 *packageFamilyNameLength, PWSTR packageFamilyName);
-    GetPackageFamilyNameProc GetPackageFamilyName =
-      (GetPackageFamilyNameProc)GetProcAddress(Kernel32, "GetPackageFamilyName");
-    UINT32 Len = 0;
-    bool Result =
-      (GetPackageFamilyName != NULL) &&
-      (GetPackageFamilyName(GetCurrentProcess(), &Len, NULL) == ERROR_INSUFFICIENT_BUFFER);
-    GIsUWP = (Result ? 1 : 0);
+    typedef LONG WINAPI (* GetCurrentPackageFamilyNameProc)(UINT32 * packageFamilyNameLength, PWSTR packageFamilyName);
+    GetCurrentPackageFamilyNameProc GetCurrentPackageFamilyName =
+      (GetCurrentPackageFamilyNameProc)GetProcAddress(Kernel32, "GetCurrentPackageFamilyName");
+    UINT32 NameLen = 0;
+    if ((GetCurrentPackageFamilyName != NULL) &&
+        (GetCurrentPackageFamilyName(&NameLen, NULL) == ERROR_INSUFFICIENT_BUFFER))
+    {
+      GIsUWP = 1;
+      GPackageName.SetLength(NameLen);
+      if (GetCurrentPackageFamilyName(&NameLen, GPackageName.c_str()) == ERROR_SUCCESS)
+      {
+        PackStr(GPackageName);
+      }
+      else
+      {
+        GPackageName = L"err";
+      }
+    }
   }
+}
+//---------------------------------------------------------------------------
+bool __fastcall IsUWP()
+{
+  NeedUWPData();
   return (GIsUWP > 0);
 }
 //---------------------------------------------------------------------------
+UnicodeString GetPackageName()
+{
+  NeedUWPData();
+  return GPackageName;
+}
+//---------------------------------------------------------------------------
 LCID __fastcall GetDefaultLCID()
 {
   return GetUserDefaultLCID();

+ 1 - 0
source/core/Common.h

@@ -143,6 +143,7 @@ bool __fastcall IsWin10();
 bool __fastcall IsWin10Build(unsigned int BuildNumber);
 bool __fastcall IsWine();
 bool __fastcall IsUWP();
+UnicodeString GetPackageName();
 TLibModule * __fastcall FindModule(void * Instance);
 __int64 __fastcall Round(double Number);
 bool __fastcall TryRelativeStrToDateTime(UnicodeString S, TDateTime & DateTime, bool Add);

+ 1 - 0
source/windows/WinMain.cpp

@@ -451,6 +451,7 @@ void __fastcall UpdateStaticUsage()
   Configuration->Usage->Set(L"WindowsProductType", (static_cast<int>(Type)));
   Configuration->Usage->Set(L"Windows64", IsWin64());
   Configuration->Usage->Set(L"UWP", IsUWP());
+  Configuration->Usage->Set(L"PackageName", GetPackageName());
   Configuration->Usage->Set(L"DefaultLocale",
     // See TGUIConfiguration::GetAppliedLocaleHex()
     IntToHex(static_cast<int>(GetDefaultLCID()), 4));