Author SHA1 Message Date
TheTank20 01d6d8fc1a Update README.md 2025-07-19 17:26:53 -05:00
TheTank20 dda722bde2 Update README.md 2025-07-19 17:22:20 -05:00
TheTank20 1e7907647e Update README.md 2025-07-19 17:21:40 -05:00
TheTank20 3d8c868c6a Update README.md 2025-07-19 17:21:31 -05:00
TheTank20 6d86853af5 Merge pull request #12 from UMSKT/pipes
Pipe support for confirmation IDs and product keys
2025-07-19 17:17:38 -05:00
TheTank20 a9aff45f65 pipe support for confids 2025-07-19 17:07:16 -05:00
TheTank20 2aae952475 Merge pull request #9 from UMSKT/change-icon
Change icon to non-Microsoft one
2025-07-19 16:32:01 -05:00
TheTank20 494287b00d Add files via upload 2025-07-19 16:28:47 -05:00
19 changed files with 48 additions and 5 deletions

No files matched your search

+3 -1
View File
@@ -26,11 +26,13 @@ If you have an Itanium version of Windows XP or Server 2003, Windows Product Act
`/?`: Outputs all the commands you can use.
`/ipk` and `/dti` also support reading from stdin via a pipe. So, you could do something like `echo FCKGW-RHQQ2-YXRKT-8TG6W-2B7Q8 | xpmgr_x86 /ipk` or `echo 253286028742154311079061239762245184619981623171292574 | xpmgr_x86 /atp` (replace echo with your own program).
## Releases
https://github.com/UMSKT/xpmgr/releases
## Credits
Icon made by %fillin%, released under Creative Commons CC-BY-SA 4.0. Modified by [TheTank20](https://github.com/thepwrtank18) to differenciate from UMSKT.
Icon made by [TehAweseomestKitteh](https://kittehcreations.com/), released under Creative Commons CC-BY-SA 4.0. Modified by [TheTank20](https://github.com/thepwrtank18) (poorly) to differenciate from UMSKT.
## License
This code is licensed under the LGPLv3 license.
+2
View File
@@ -0,0 +1,2 @@
The icons in this folder follow the same CC-BY-SA 4.0 license as the final version, seen in the root folder.
Modifications were made to the smaller VGA icons for clarity.
Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

+43 -4
View File
@@ -142,6 +142,19 @@ static BOOL XP_LoadLicenseManager()
#pragma region Internals
// Add function to read from stdin
std::string readFromStdin() {
std::string input;
if (!std::cin.eof() && std::getline(std::cin, input)) {
// Remove any trailing whitespace, newlines or carriage returns
input.erase(std::find_if(input.rbegin(), input.rend(), [](unsigned char ch) {
return !std::isspace(ch);
}).base(), input.end());
return input;
}
return "";
}
wchar_t* convertCharArrayToLPCWSTR(const char* charArray)
{
auto* wString = new wchar_t[4096];
@@ -536,10 +549,10 @@ int main(int argc, char* argv[])
"\n"
"Usage: \n"
"/dti: Gets the Installation ID\n"
"/atp [cid]: Sets Confirmation ID (If successful, activates Windows/Office)\n"
"/atp [cid]: Sets Confirmation ID (If successful, activates Windows/Office) (can also read from stdin)\n"
"/xpr: Gets the days before activation is required (Grace period)\n"
"/xpr-eval: Gets the days before the evaluation period expires (Eval. copies only)\n"
"/ipk [pkey]: Sets/changes product key\n"
"/ipk [pkey]: Sets/changes product key (can also read from stdin)\n"
"/dli: Gets the product ID of Windows\n"
"/?: Displays this message";
@@ -596,7 +609,20 @@ int main(int argc, char* argv[])
return 0;
}
else if (cmdOptionExists(argv, argv + argc, "/atp")) {
std::cout << ConvertToStdString(XP_SetConfirmationID(ConvertCharToBSTR(getCmdOption(argv, argv + argc, "--SetConfirmationID"))));
const char* confirmationId = getCmdOption(argv, argv + argc, "/atp");
if (!confirmationId) {
// No argument provided, try reading from stdin
std::string pipedInput = readFromStdin();
if (!pipedInput.empty()) {
std::cout << ConvertToStdString(XP_SetConfirmationID(ConvertCharToBSTR(pipedInput.c_str())));
} else {
std::cout << "An error occurred at main: No confirmation ID provided via argument or pipe\n\n";
std::cout << text;
return 7;
}
} else {
std::cout << ConvertToStdString(XP_SetConfirmationID(ConvertCharToBSTR(confirmationId)));
}
return 0;
}
else if (cmdOptionExists(argv, argv + argc, "/xpr")) {
@@ -609,7 +635,20 @@ int main(int argc, char* argv[])
}
else if (cmdOptionExists(argv, argv + argc, "/ipk")) {
std::cout << ConvertToStdString(XP_SetProductKey(convertCharArrayToLPCWSTR(getCmdOption(argv, argv + argc, "--SetProductKey"))));
const char* productKey = getCmdOption(argv, argv + argc, "/ipk");
if (!productKey) {
// No argument provided, try reading from stdin
std::string pipedInput = readFromStdin();
if (!pipedInput.empty()) {
std::cout << ConvertToStdString(XP_SetProductKey(convertCharArrayToLPCWSTR(pipedInput.c_str())));
} else {
std::cout << "An error occurred at main: No product key provided via argument or pipe\n\n";
std::cout << text;
return 7;
}
} else {
std::cout << ConvertToStdString(XP_SetProductKey(convertCharArrayToLPCWSTR(productKey)));
}
return 0;
}
else if (cmdOptionExists(argv, argv + argc, "/dli")) {