56 lines
1.6 KiB
C#
56 lines
1.6 KiB
C#
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|