summaryrefslogtreecommitdiff
path: root/LibTSforge/Modifiers/UniqueIdDelete.cs
diff options
context:
space:
mode:
Diffstat (limited to 'LibTSforge/Modifiers/UniqueIdDelete.cs')
-rw-r--r--LibTSforge/Modifiers/UniqueIdDelete.cs55
1 files changed, 55 insertions, 0 deletions
diff --git a/LibTSforge/Modifiers/UniqueIdDelete.cs b/LibTSforge/Modifiers/UniqueIdDelete.cs
new file mode 100644
index 0000000..b83d328
--- /dev/null
+++ b/LibTSforge/Modifiers/UniqueIdDelete.cs
@@ -0,0 +1,55 @@
+namespace LibTSforge.Modifiers
+{
+ using System;
+ using LibTSforge.PhysicalStore;
+ using LibTSforge.SPP;
+
+ public static class UniqueIdDelete
+ {
+ public static void DeleteUniqueId(PSVersion version, bool production, Guid actId)
+ {
+ Guid appId;
+
+ if (actId == Guid.Empty)
+ {
+ appId = SLApi.WINDOWS_APP_ID;
+ actId = SLApi.GetDefaultActivationID(appId, true);
+
+ if (actId == Guid.Empty)
+ {
+ throw new Exception("No applicable activation IDs found.");
+ }
+ }
+ else
+ {
+ appId = SLApi.GetAppId(actId);
+ }
+
+ string instId = SLApi.GetInstallationID(actId);
+ Guid pkeyId = SLApi.GetInstalledPkeyID(actId);
+
+ Utils.KillSPP();
+
+ Logger.WriteLine("Writing TrustedStore data...");
+
+ using (IPhysicalStore store = Utils.GetStore(version, production))
+ {
+ string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId);
+ PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString());
+
+ if (keyBlock == null)
+ {
+ throw new Exception("No product key found.");
+ }
+
+ VariableBag pkb = new VariableBag(keyBlock.Data);
+
+ pkb.DeleteBlock("SppPkeyUniqueIdToken");
+
+ store.SetBlock(key, pkeyId.ToString(), pkb.Serialize());
+ }
+
+ Logger.WriteLine("Successfully removed Unique ID for product key ID " + pkeyId);
+ }
+ }
+}