add /siid option
This commit is contained in:
69
LibTSforge/Modifiers/SetIIDParams.cs
Normal file
69
LibTSforge/Modifiers/SetIIDParams.cs
Normal file
@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using LibTSforge.PhysicalStore;
|
||||
using LibTSforge.SPP;
|
||||
|
||||
namespace LibTSforge.Modifiers
|
||||
{
|
||||
public static class SetIIDParams
|
||||
{
|
||||
public static void SetParams(PSVersion version, bool production, Guid actId, PKeyAlgorithm algorithm, int group, int serial, ulong security)
|
||||
{
|
||||
if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008.");
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
Guid pkeyId = SLApi.GetInstalledPkeyID(actId);
|
||||
|
||||
SPPUtils.KillSPP(version);
|
||||
|
||||
Logger.WriteLine("Writing TrustedStore data...");
|
||||
|
||||
using (IPhysicalStore store = SPPUtils.GetStore(version, production))
|
||||
{
|
||||
string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId);
|
||||
PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString());
|
||||
|
||||
if (keyBlock == null)
|
||||
{
|
||||
throw new InvalidDataException("Failed to get product key data for activation ID " + actId + ".");
|
||||
}
|
||||
|
||||
VariableBag pkb = new VariableBag(keyBlock.Data, version);
|
||||
|
||||
ProductKey pkey = new ProductKey
|
||||
{
|
||||
Group = group,
|
||||
Serial = serial,
|
||||
Security = security,
|
||||
Algorithm = algorithm,
|
||||
Upgrade = false
|
||||
};
|
||||
|
||||
string blockName = version == PSVersion.Win7 ? "SppPkeyShortAuthenticator" : "SppPkeyPhoneActivationData";
|
||||
pkb.SetBlock(blockName, pkey.GetPhoneData(version));
|
||||
store.SetBlock(key, pkeyId.ToString(), pkb.Serialize());
|
||||
}
|
||||
|
||||
Logger.WriteLine("Successfully set IID parameters.");
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user