mirror of https://github.com/UMSKT/xpmgr.git
build properly???
This commit is contained in:
parent
85aaea76bf
commit
2e0fad82db
225
xpmgr.cpp
225
xpmgr.cpp
|
@ -16,118 +16,7 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
typedef struct IUnknown IUnknown;
|
||||
|
||||
// The magic numbers, interface, and LoadLicenseManager() function was made by diamondggg on MyDigitalLife.
|
||||
// LoadLicenseManager() was modified to suit a CLI rather than a GUI.
|
||||
// Everything else was either made by TheTank20 or copy pasted from StackOverflow.
|
||||
static CLSID xp_licdllCLSID = { 0xACADF079, 0xCBCD, 0x4032, {0x83, 0xF2, 0xFA, 0x47, 0xC4, 0xDB, 0x09, 0x6F} };
|
||||
static IID xp_licenseAgentIID = { 0xB8CBAD79, 0x3F1F, 0x481A, {0xBB, 0x0C, 0xE7, 0xBB, 0xD7, 0x7B, 0xDD, 0xD1} };
|
||||
|
||||
#undef XP_INTERFACE
|
||||
#define XP_INTERFACE ICOMLicenseAgent
|
||||
DECLARE_INTERFACE_(ICOMLicenseAgent, IDispatch)
|
||||
{
|
||||
/*** IUnknown methods ***/
|
||||
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
|
||||
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
|
||||
STDMETHOD_(ULONG, Release)(THIS) PURE;
|
||||
|
||||
/*** IDispatch methods ***/
|
||||
STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR * pctinfo) PURE;
|
||||
STDMETHOD(GetTypeInfo)(THIS_ UINT itinfo, LCID lcid, ITypeInfo FAR * FAR * pptinfo) PURE;
|
||||
STDMETHOD(GetIDsOfNames)(THIS_ REFIID riid, OLECHAR FAR * FAR * rgszNames, UINT cNames, LCID lcid, DISPID FAR * rgdispid) PURE;
|
||||
STDMETHOD(Invoke)(THIS_ DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR * pdispparams, VARIANT FAR * pvarResult, EXCEPINFO FAR * pexcepinfo, UINT FAR * puArgErr) PURE;
|
||||
|
||||
/*** ICOMLicenseAgent methods ***/
|
||||
STDMETHOD(Initialize)(THIS_ ULONG dwBPC, ULONG dwMode, BSTR bstrLicSource, ULONG * pdwRetCode) PURE;
|
||||
STDMETHOD(GetFirstName)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetFirstName)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetLastName)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetLastName)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetOrgName)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetOrgName)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetEmail)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetEmail)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetPhone)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetPhone)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetAddress1)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetAddress1)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetCity)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetCity)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetState)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetState)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetCountryCode)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetCountryCode)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetCountryDesc)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetCountryDesc)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetZip)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetZip)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetIsoLanguage)(THIS_ ULONG * pdwVal) PURE; // implemented
|
||||
STDMETHOD(SetIsoLanguage)(THIS_ ULONG dwNewVal) PURE; // implemented
|
||||
STDMETHOD(GetMSUpdate)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetMSUpdate)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetMSOffer)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetMSOffer)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetOtherOffer)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetOtherOffer)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(GetAddress2)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(SetAddress2)(THIS_ BSTR bstrNewVal) PURE; // implemented
|
||||
STDMETHOD(AsyncProcessHandshakeRequest)(THIS_ LONG bReviseCustInfo) PURE;
|
||||
STDMETHOD(AsyncProcessNewLicenseRequest)(THIS) PURE;
|
||||
STDMETHOD(AsyncProcessReissueLicenseRequest)(THIS) PURE;
|
||||
STDMETHOD(AsyncProcessReviseCustInfoRequest)(THIS) PURE;
|
||||
STDMETHOD(GetAsyncProcessReturnCode)(THIS_ ULONG * pdwRetCode) PURE;
|
||||
STDMETHOD(AsyncProcessDroppedLicenseRequest)(THIS) PURE;
|
||||
STDMETHOD(GenerateInstallationId)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(DepositConfirmationId)(THIS_ BSTR bstrVal, ULONG * pdwRetCode) PURE; // implemented
|
||||
STDMETHOD(GetExpirationInfo)(THIS_ ULONG * pdwWPALeft, ULONG * pdwEvalLeft) PURE; // implemented
|
||||
STDMETHOD(AsyncProcessRegistrationRequest)(THIS) PURE;
|
||||
STDMETHOD(ProcessHandshakeRequest)(THIS_ LONG bReviseCustInfo) PURE;
|
||||
STDMETHOD(ProcessNewLicenseRequest)(THIS) PURE; // implemented
|
||||
STDMETHOD(ProcessDroppedLicenseRequest)(THIS) PURE; // implemented
|
||||
STDMETHOD(ProcessReissueLicenseRequest)(THIS) PURE; // implemented
|
||||
STDMETHOD(ProcessReviseCustInfoRequest)(THIS) PURE; // implemented
|
||||
STDMETHOD(EnsureInternetConnection)(THIS) PURE; // implemented
|
||||
STDMETHOD(SetProductKey)(THIS_ LPWSTR pszNewProductKey) PURE; // implemented
|
||||
STDMETHOD(GetProductID)(THIS_ BSTR * pbstrVal) PURE; // implemented
|
||||
STDMETHOD(VerifyCheckDigits)(THIS_ BSTR bstrCIDIID, LONG * pbValue) PURE;
|
||||
};
|
||||
|
||||
static BOOL XP_ComInitialized = FALSE;
|
||||
static ICOMLicenseAgent* XP_LicenseAgent = NULL;
|
||||
|
||||
static BOOL LoadLicenseManager()
|
||||
{
|
||||
if (!XP_ComInitialized) {
|
||||
HRESULT status = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
||||
if (FAILED(status)) {
|
||||
std::cout << "An error occurred at CoInitializeEx: ", status;
|
||||
return FALSE;
|
||||
}
|
||||
XP_ComInitialized = TRUE;
|
||||
}
|
||||
if (!XP_LicenseAgent) {
|
||||
HRESULT status = CoCreateInstance(xp_licdllCLSID, NULL, CLSCTX_INPROC_SERVER, xp_licenseAgentIID, (void**)&XP_LicenseAgent);
|
||||
int good = 0;
|
||||
if (SUCCEEDED(status)) {
|
||||
ULONG dwRetCode;
|
||||
status = XP_LicenseAgent->Initialize(0xC475, 3, 0, &dwRetCode);
|
||||
if (SUCCEEDED(status) && dwRetCode == 0) {
|
||||
good = 1;
|
||||
}
|
||||
else {
|
||||
XP_LicenseAgent->Release();
|
||||
XP_LicenseAgent = NULL;
|
||||
}
|
||||
}
|
||||
if (!good) {
|
||||
std::cout << "An error occurred at CoCreateInstance: " + status;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
// Internal stuff
|
||||
|
||||
wchar_t* convertCharArrayToLPCWSTR(const char* charArray)
|
||||
{
|
||||
|
@ -258,6 +147,118 @@ bool TerminateProcessByName(const wchar_t* processName)
|
|||
return false; // Process not found
|
||||
}
|
||||
|
||||
typedef struct IUnknown IUnknown;
|
||||
|
||||
// The magic numbers, interface, and LoadLicenseManager() function was made by diamondggg on MyDigitalLife.
|
||||
// LoadLicenseManager() was modified to suit a CLI rather than a GUI.
|
||||
// Everything else was either made by TheTank20 or copy pasted from StackOverflow.
|
||||
static CLSID xp_licdllCLSID = { 0xACADF079, 0xCBCD, 0x4032, {0x83, 0xF2, 0xFA, 0x47, 0xC4, 0xDB, 0x09, 0x6F} };
|
||||
static IID xp_licenseAgentIID = { 0xB8CBAD79, 0x3F1F, 0x481A, {0xBB, 0x0C, 0xE7, 0xBB, 0xD7, 0x7B, 0xDD, 0xD1} };
|
||||
#undef XP_INTERFACE
|
||||
#define XP_INTERFACE ICOMLicenseAgent
|
||||
DECLARE_INTERFACE_(ICOMLicenseAgent, IDispatch)
|
||||
{
|
||||
/*** IUnknown methods ***/
|
||||
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
|
||||
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
|
||||
STDMETHOD_(ULONG, Release)(THIS) PURE;
|
||||
|
||||
/*** IDispatch methods ***/
|
||||
STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR * pctinfo) PURE;
|
||||
STDMETHOD(GetTypeInfo)(THIS_ UINT itinfo, LCID lcid, ITypeInfo FAR * FAR * pptinfo) PURE;
|
||||
STDMETHOD(GetIDsOfNames)(THIS_ REFIID riid, OLECHAR FAR * FAR * rgszNames, UINT cNames, LCID lcid, DISPID FAR * rgdispid) PURE;
|
||||
STDMETHOD(Invoke)(THIS_ DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR * pdispparams, VARIANT FAR * pvarResult, EXCEPINFO FAR * pexcepinfo, UINT FAR * puArgErr) PURE;
|
||||
|
||||
/*** ICOMLicenseAgent methods ***/
|
||||
STDMETHOD(Initialize)(THIS_ ULONG dwBPC, ULONG dwMode, BSTR bstrLicSource, ULONG * pdwRetCode) PURE;
|
||||
STDMETHOD(GetFirstName)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetFirstName)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetLastName)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetLastName)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetOrgName)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetOrgName)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetEmail)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetEmail)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetPhone)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetPhone)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetAddress1)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetAddress1)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetCity)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetCity)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetState)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetState)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetCountryCode)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetCountryCode)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetCountryDesc)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetCountryDesc)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetZip)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetZip)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetIsoLanguage)(THIS_ ULONG * pdwVal) PURE;
|
||||
STDMETHOD(SetIsoLanguage)(THIS_ ULONG dwNewVal) PURE;
|
||||
STDMETHOD(GetMSUpdate)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetMSUpdate)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetMSOffer)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetMSOffer)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetOtherOffer)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetOtherOffer)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(GetAddress2)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(SetAddress2)(THIS_ BSTR bstrNewVal) PURE;
|
||||
STDMETHOD(AsyncProcessHandshakeRequest)(THIS_ LONG bReviseCustInfo) PURE;
|
||||
STDMETHOD(AsyncProcessNewLicenseRequest)(THIS) PURE;
|
||||
STDMETHOD(AsyncProcessReissueLicenseRequest)(THIS) PURE;
|
||||
STDMETHOD(AsyncProcessReviseCustInfoRequest)(THIS) PURE;
|
||||
STDMETHOD(GetAsyncProcessReturnCode)(THIS_ ULONG * pdwRetCode) PURE;
|
||||
STDMETHOD(AsyncProcessDroppedLicenseRequest)(THIS) PURE;
|
||||
STDMETHOD(GenerateInstallationId)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(DepositConfirmationId)(THIS_ BSTR bstrVal, ULONG * pdwRetCode) PURE;
|
||||
STDMETHOD(GetExpirationInfo)(THIS_ ULONG * pdwWPALeft, ULONG * pdwEvalLeft) PURE;
|
||||
STDMETHOD(AsyncProcessRegistrationRequest)(THIS) PURE;
|
||||
STDMETHOD(ProcessHandshakeRequest)(THIS_ LONG bReviseCustInfo) PURE;
|
||||
STDMETHOD(ProcessNewLicenseRequest)(THIS) PURE;
|
||||
STDMETHOD(ProcessDroppedLicenseRequest)(THIS) PURE;
|
||||
STDMETHOD(ProcessReissueLicenseRequest)(THIS) PURE;
|
||||
STDMETHOD(ProcessReviseCustInfoRequest)(THIS) PURE;
|
||||
STDMETHOD(EnsureInternetConnection)(THIS) PURE;
|
||||
STDMETHOD(SetProductKey)(THIS_ LPWSTR pszNewProductKey) PURE;
|
||||
STDMETHOD(GetProductID)(THIS_ BSTR * pbstrVal) PURE;
|
||||
STDMETHOD(VerifyCheckDigits)(THIS_ BSTR bstrCIDIID, LONG * pbValue) PURE;
|
||||
};
|
||||
|
||||
static BOOL XP_ComInitialized = FALSE;
|
||||
static ICOMLicenseAgent* XP_LicenseAgent = NULL;
|
||||
|
||||
static BOOL LoadLicenseManager()
|
||||
{
|
||||
if (!XP_ComInitialized) {
|
||||
HRESULT status = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
||||
if (FAILED(status)) {
|
||||
std::cout << "An error occurred at CoInitializeEx: ", status;
|
||||
return FALSE;
|
||||
}
|
||||
XP_ComInitialized = TRUE;
|
||||
}
|
||||
if (!XP_LicenseAgent) {
|
||||
HRESULT status = CoCreateInstance(xp_licdllCLSID, NULL, CLSCTX_INPROC_SERVER, xp_licenseAgentIID, (void**)&XP_LicenseAgent);
|
||||
int good = 0;
|
||||
if (SUCCEEDED(status)) {
|
||||
ULONG dwRetCode;
|
||||
status = XP_LicenseAgent->Initialize(0xC475, 3, 0, &dwRetCode);
|
||||
if (SUCCEEDED(status) && dwRetCode == 0) {
|
||||
good = 1;
|
||||
}
|
||||
else {
|
||||
XP_LicenseAgent->Release();
|
||||
XP_LicenseAgent = NULL;
|
||||
}
|
||||
}
|
||||
if (!good) {
|
||||
std::cout << "An error occurred at CoCreateInstance: " + status;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BSTR GetWPALeft() {
|
||||
if (!LoadLicenseManager()) {
|
||||
return SysAllocString(L"An error occurred at LoadLicenseManager: Failed to load");
|
||||
|
|
Loading…
Reference in New Issue