Every now
and then, there is a need to export license keys from a system. I needed to get
into the VAR layer to modify code in a Microsoft VPC, but as we all know,
Contoso license keys don't come with the BUS/CUS/VAR access codes. So I did
what any developer would do:
Disclaimer (ripped from MS)
All code used below is meant for illustration purposes only and is not intended for use in production. The following disclaimer applies to all code used in this blog:
Here is said job, enjoy!
- Write a job to export the Contoso license key file
- Import my company's partner license key file
- DO NOT SYNC when it asks
- Jump in the VAR layer using our layer access code to make my changes real quick
- Import back the Contoso license key file I exported from my job and SYNC
Disclaimer (ripped from MS)
All code used below is meant for illustration purposes only and is not intended for use in production. The following disclaimer applies to all code used in this blog:
THIS CODE IS
MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK OF THE USE
OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER. USE AND
REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS HEREBY
PERMITTED.
Here is said job, enjoy!
static void OutputLicenseToText(Args _args) { #define.licenseVersion(2) #define.KeywordLen(20) #define.keywordLicense('License') #define.keywordProperties('Properties') #define.keywordCodes('Codes') #define.keywordCodeLine('CodeLine') #define.keywordDate('Date') #define.keywordSerial('Serial') #define.keywordValue('Value') #define.blank('') #define.space1(' ') #define.space2(' ') #define.space3(' ') #define.spaceHash(' #') #define.OutputFilename(@'C:\OutputLicenseKeys.txt') #define.keywordInfo(1) #define.keywordWarning(2) SysConfig sysConfig; SysLicenseCodeSort sysLicenseCodeSort; container fileOut; int i; System.IO.StreamWriter sw; InteropPermission perm = new InteropPermission(InteropKind::ClrInterop); ; fileOut += "LicenseVersion " + strfmt("%1", #licenseVersion); fileOut += #blank; fileOut += #keywordLicense + #spaceHash + xSysConfig::find(ConfigType::LicenseName,0).Value; fileOut += #blank; fileOut += #space1 + #keywordProperties; fileOut += #space2 + "Name" + #spaceHash + xSysConfig::find(ConfigType::LicenseName,0).Value; fileOut += #space2 + #keywordSerial + #spaceHash + xSysConfig::find(ConfigType::SerialNo,0).Value; fileOut += #space2 + #keywordDate + #spaceHash + xSysConfig::find(ConfigType::LicenseName,1).Value; fileOut += #space1 + "EndProperties"; fileOut += #blank; fileOut += #space1 + #keywordCodes; // Build CodeLines while select sysConfig where sysConfig.configType == ConfigType::AccessCodes && sysConfig.value != #blank join sysLicenseCodeSort order by SortIdx where sysLicenseCodeSort.Id == sysConfig.id { fileOut += #space2 + #keywordCodeLine + #spaceHash + int2str(sysConfig.id + 1); fileOut += #space3 + #keywordValue + #spaceHash + sysConfig.value; fileOut += #space2 + "EndCodeLine"; fileOut += #blank; } fileOut += #blank; fileOut += #space2 + "EndCodes"; fileOut += #space1 + "EndLicense"; // Begin file output perm.assert(); sw = new System.IO.StreamWriter(#OutputFilename); for (i=1; i<=conLen(fileOut); i++) { sw.WriteLine(conPeek(fileOut, i)); } sw.Flush(); sw.Close(); sw.Dispose(); CodeAccessPermission::revertAssert(); info("License successfully output to " + #OutputFilename); }
没有评论:
发表评论