Skip to content

Commit 99aaf7f

Browse files
authored
Merge pull request #1 from bb107/service
Service
2 parents 4866c4c + efe0008 commit 99aaf7f

16 files changed

+801
-18
lines changed

OfficeActivator/Mutex.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include "pch.h"
2+
#include "Mutex.h"
3+
#include <sddl.h>
4+
#pragma comment(lib,"Advapi32.lib")
5+
6+
#define OA_MUTEX_NAME _T("Global\\OfficeActivatorMutex")
7+
8+
HANDLE WINAPI CreateGlobalMutex() {
9+
HANDLE mutex = nullptr;
10+
WCHAR* pszStringSecurityDescriptor = L"D:(A;;GA;;;WD)(A;;GA;;;AN)S:(ML;;NW;;;ME)";
11+
PSECURITY_DESCRIPTOR pSecDesc;
12+
13+
if (ConvertStringSecurityDescriptorToSecurityDescriptor(pszStringSecurityDescriptor, SDDL_REVISION_1, &pSecDesc, NULL)) {
14+
SECURITY_ATTRIBUTES SecAttr;
15+
SecAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
16+
SecAttr.lpSecurityDescriptor = pSecDesc;
17+
SecAttr.bInheritHandle = FALSE;
18+
19+
mutex = CreateMutex(&SecAttr, FALSE, OA_MUTEX_NAME);
20+
LocalFree(pSecDesc);
21+
}
22+
23+
return mutex;
24+
}

OfficeActivator/Mutex.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#pragma once
2+
3+
HANDLE WINAPI CreateGlobalMutex();

OfficeActivator/OfficeActivator.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "OfficeActivator.h"
88
#include "OfficeActivatorDlg.h"
99
#include "Sppc.h"
10+
#include "Service.h"
1011

1112
#ifdef _DEBUG
1213
#define new DEBUG_NEW
@@ -20,6 +21,10 @@ COfficeActivatorApp theApp;
2021

2122
BOOL COfficeActivatorApp::InitInstance()
2223
{
24+
if (SvcRun()) {
25+
return FALSE;
26+
}
27+
2328
INITCOMMONCONTROLSEX InitCtrls;
2429
InitCtrls.dwSize = sizeof(InitCtrls);
2530
InitCtrls.dwICC = ICC_WIN95_CLASSES;

OfficeActivator/OfficeActivator.rc

2.37 KB
Binary file not shown.

OfficeActivator/OfficeActivator.vcxproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,18 +191,23 @@
191191
</ResourceCompile>
192192
</ItemDefinitionGroup>
193193
<ItemGroup>
194+
<ClInclude Include="ServiceManageDlg.h" />
194195
<ClInclude Include="framework.h" />
195196
<ClInclude Include="Helps.h" />
197+
<ClInclude Include="Mutex.h" />
196198
<ClInclude Include="OfficeActivator.h" />
197199
<ClInclude Include="OfficeActivatorDlg.h" />
198200
<ClInclude Include="pch.h" />
199201
<ClInclude Include="PeFile.h" />
200202
<ClInclude Include="Resource.h" />
203+
<ClInclude Include="Service.h" />
201204
<ClInclude Include="Sppc.h" />
202205
<ClInclude Include="targetver.h" />
203206
</ItemGroup>
204207
<ItemGroup>
208+
<ClCompile Include="ServiceManageDlg.cpp" />
205209
<ClCompile Include="Helps.cpp" />
210+
<ClCompile Include="Mutex.cpp" />
206211
<ClCompile Include="OfficeActivator.cpp" />
207212
<ClCompile Include="OfficeActivatorDlg.cpp" />
208213
<ClCompile Include="pch.cpp">
@@ -212,6 +217,7 @@
212217
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
213218
</ClCompile>
214219
<ClCompile Include="PeFile.cpp" />
220+
<ClCompile Include="Service.cpp" />
215221
<ClCompile Include="Sppc.cpp" />
216222
</ItemGroup>
217223
<ItemGroup>
@@ -223,6 +229,7 @@
223229
</ItemGroup>
224230
<ItemGroup>
225231
<Image Include="..\screenshots\main.png" />
232+
<Image Include="..\screenshots\sc.png" />
226233
<Image Include="res\OfficeActivator.ico" />
227234
</ItemGroup>
228235
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

OfficeActivator/OfficeActivator.vcxproj.filters

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@
4848
<ClInclude Include="Sppc.h">
4949
<Filter>Header Files\Helps</Filter>
5050
</ClInclude>
51+
<ClInclude Include="Service.h">
52+
<Filter>Header Files</Filter>
53+
</ClInclude>
54+
<ClInclude Include="Mutex.h">
55+
<Filter>Header Files\Helps</Filter>
56+
</ClInclude>
57+
<ClInclude Include="ServiceManageDlg.h">
58+
<Filter>Header Files</Filter>
59+
</ClInclude>
5160
</ItemGroup>
5261
<ItemGroup>
5362
<ClCompile Include="OfficeActivator.cpp">
@@ -68,6 +77,15 @@
6877
<ClCompile Include="Sppc.cpp">
6978
<Filter>Source Files\Helps</Filter>
7079
</ClCompile>
80+
<ClCompile Include="Service.cpp">
81+
<Filter>Source Files</Filter>
82+
</ClCompile>
83+
<ClCompile Include="Mutex.cpp">
84+
<Filter>Source Files\Helps</Filter>
85+
</ClCompile>
86+
<ClCompile Include="ServiceManageDlg.cpp">
87+
<Filter>Source Files</Filter>
88+
</ClCompile>
7189
</ItemGroup>
7290
<ItemGroup>
7391
<ResourceCompile Include="OfficeActivator.rc">
@@ -89,5 +107,8 @@
89107
<Image Include="..\screenshots\main.png">
90108
<Filter>Resource Files</Filter>
91109
</Image>
110+
<Image Include="..\screenshots\sc.png">
111+
<Filter>Resource Files</Filter>
112+
</Image>
92113
</ItemGroup>
93114
</Project>

OfficeActivator/OfficeActivatorDlg.cpp

Lines changed: 69 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
#include "Helps.h"
77
#include "PeFile.h"
88
#include "Sppc.h"
9+
#include "Mutex.h"
10+
#include <winsvc.h>
11+
#include "ServiceManageDlg.h"
912
#include <vector>
1013
#include <map>
1114

@@ -36,6 +39,7 @@ LPCTSTR g_TypeTable[] = {
3639
_T("ul.xrm-ms"),
3740
_T("pl.xrm-ms"),
3841
};
42+
HANDLE g_Mutex;
3943

4044
typedef struct _OSP_LICENSE {
4145

@@ -283,6 +287,9 @@ BOOL COfficeActivatorDlg::OnInitDialog()
283287
SetIcon(m_hIcon, TRUE); // Set big icon
284288
SetIcon(m_hIcon, FALSE); // Set small icon
285289

290+
g_Mutex = CreateGlobalMutex();
291+
ASSERT(g_Mutex);
292+
286293
CListCtrl* list = static_cast<CListCtrl*>(GetDlgItem(IDC_LIST_INSTALLED_LICENSE));
287294
ASSERT(list);
288295
InitializeListControl(list);
@@ -293,7 +300,7 @@ BOOL COfficeActivatorDlg::OnInitDialog()
293300
InitializeProductKeyList(pks);
294301

295302
if (!IsUserAnAdmin()) {
296-
int buttons[] = { IDC_BUTTON_PATCH,IDC_BUTTON_RESTORE,IDC_BUTTON_INSTALL_PKEY,IDC_BUTTON_INSTALL_LIC,IDC_BUTTON_UNINSTALL_LIC,IDC_BUTTON_UNINSTALL_PKEY };
303+
int buttons[] = { IDC_BUTTON_PATCH,IDC_BUTTON_RESTORE,IDC_BUTTON_INSTALL_PKEY,IDC_BUTTON_INSTALL_LIC,IDC_BUTTON_UNINSTALL_LIC,IDC_BUTTON_UNINSTALL_PKEY, IDC_BUTTON_SVC_MANAGE };
297304
for (int i = 0; i < sizeof(buttons) / sizeof(int); ++i) {
298305
CButton* btn = static_cast<CButton*>(GetDlgItem(buttons[i]));
299306
ASSERT(btn);
@@ -336,7 +343,8 @@ BEGIN_MESSAGE_MAP(COfficeActivatorDlg, CDialogEx)
336343
ON_CBN_SELCHANGE(IDC_COMBO_LICENSES_VERSION, &COfficeActivatorDlg::OnCbnSelchangeComboLicensesVersion)
337344
ON_BN_CLICKED(IDC_BUTTON_INSTALL_LIC, &COfficeActivatorDlg::OnBnClickedButtonInstallLic)
338345
ON_BN_CLICKED(IDC_BUTTON_UNINSTALL_LIC, &COfficeActivatorDlg::OnBnClickedButtonUninstallLic)
339-
346+
ON_BN_CLICKED(IDC_BUTTON_SVC_MANAGE, &COfficeActivatorDlg::OnBnClickedButtonSvcManage)
347+
340348
ON_WM_CTLCOLOR()
341349
END_MESSAGE_MAP()
342350

@@ -415,6 +423,8 @@ void COfficeActivatorDlg::OnBnClickedButtonAutoDetect()
415423

416424
void COfficeActivatorDlg::OnBnClickedButtonCheckPatchStatus()
417425
{
426+
WaitForSingleObject(g_Mutex, INFINITE);
427+
418428
DWORD checkResult = 0;
419429
CString officePath, msoPath;
420430
if (GetDlgItemText(IDC_EDIT_OFFICE_PATH, officePath) == 0 ||
@@ -483,14 +493,12 @@ void COfficeActivatorDlg::OnBnClickedButtonCheckPatchStatus()
483493

484494
officePatch->Invalidate();
485495
msoPatch->Invalidate();
496+
497+
ReleaseMutex(g_Mutex);
486498
}
487499

488-
void COfficeActivatorDlg::OnBnClickedButtonPatch()
500+
void COfficeActivatorDlg::OnBnClickedButtonPatchInternal()
489501
{
490-
if (MessageBox(_T("DO YOU REALLY WANT TO APPLY PATCH?"), _T("WARNING"), MB_YESNOCANCEL | MB_ICONWARNING) != IDYES) {
491-
return;
492-
}
493-
494502
if (m_PatchState == ~0) {
495503
MessageBox(_T("Please check patch state first!"), _T("Error"));
496504
return;
@@ -576,16 +584,27 @@ void COfficeActivatorDlg::OnBnClickedButtonPatch()
576584
}
577585

578586
} while (false);
579-
580-
OnBnClickedButtonCheckPatchStatus();
581587
}
582588

583-
void COfficeActivatorDlg::OnBnClickedButtonRestore()
584-
{
585-
if (MessageBox(_T("DO YOU REALLY WANT TO RESTORE PATCH?"), _T("WARNING"), MB_YESNOCANCEL | MB_ICONWARNING) != IDYES) {
589+
void COfficeActivatorDlg::OnBnClickedButtonPatch() {
590+
if (MessageBox(_T("DO YOU REALLY WANT TO APPLY PATCH?"), _T("WARNING"), MB_YESNOCANCEL | MB_ICONWARNING) != IDYES) {
586591
return;
587592
}
588593

594+
WaitForSingleObject(g_Mutex, INFINITE);
595+
OnBnClickedButtonCheckPatchStatus();
596+
597+
__try {
598+
OnBnClickedButtonPatchInternal();
599+
}
600+
__finally {
601+
OnBnClickedButtonCheckPatchStatus();
602+
ReleaseMutex(g_Mutex);
603+
}
604+
}
605+
606+
void COfficeActivatorDlg::OnBnClickedButtonRestoreInternal()
607+
{
589608
if (m_PatchState == ~0) {
590609
MessageBox(_T("Please check patch state first!"), _T("Error"));
591610
return;
@@ -636,11 +655,26 @@ void COfficeActivatorDlg::OnBnClickedButtonRestore()
636655
return;
637656
}
638657
}
658+
}
639659

640-
//
641-
// Update patch status.
642-
//
660+
void COfficeActivatorDlg::OnBnClickedButtonRestore() {
661+
if (MessageBox(_T("DO YOU REALLY WANT TO RESTORE PATCH?\n(Maybe you need disable or delete OfficeActivatorSvc)"), _T("WARNING"), MB_YESNOCANCEL | MB_ICONWARNING) != IDYES) {
662+
return;
663+
}
664+
665+
WaitForSingleObject(g_Mutex, INFINITE);
643666
OnBnClickedButtonCheckPatchStatus();
667+
668+
__try {
669+
OnBnClickedButtonRestoreInternal();
670+
}
671+
__finally {
672+
//
673+
// Update patch status.
674+
//
675+
OnBnClickedButtonCheckPatchStatus();
676+
ReleaseMutex(g_Mutex);
677+
}
644678
}
645679

646680
void COfficeActivatorDlg::OnBnClickedButtonUpdateLic()
@@ -888,3 +922,23 @@ void COfficeActivatorDlg::OnBnClickedButtonUninstallLic()
888922

889923
OnBnClickedButtonUpdateLic();
890924
}
925+
926+
void COfficeActivatorDlg::OnBnClickedButtonSvcManage()
927+
{
928+
CString app;
929+
CString mso;
930+
GetDlgItemText(IDC_EDIT_MSO_PATH, mso);
931+
932+
if (mso.GetLength() == 0) {
933+
MessageBox(_T("Please select the location of the MSO.DLL file."), _T("Info"), MB_OK);
934+
return;
935+
}
936+
937+
AfxGetModuleFileName(AfxGetInstanceHandle(), app);
938+
939+
CString path;
940+
path.Format(_T("%s -mso \"%s\""), (LPCTSTR)app, (LPCTSTR)mso);
941+
942+
CServiceManageDlg dlg(path);
943+
dlg.DoModal();
944+
}

OfficeActivator/OfficeActivatorDlg.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class COfficeActivatorDlg : public CDialogEx
2828

2929
VOID AutoDetectOffice();
3030

31+
void OnBnClickedButtonPatchInternal();
32+
void OnBnClickedButtonRestoreInternal();
33+
3134
// Implementation
3235
protected:
3336
HICON m_hIcon;
@@ -51,4 +54,5 @@ class COfficeActivatorDlg : public CDialogEx
5154
afx_msg void OnCbnSelchangeComboLicensesVersion();
5255
afx_msg void OnBnClickedButtonInstallLic();
5356
afx_msg void OnBnClickedButtonUninstallLic();
57+
afx_msg void OnBnClickedButtonSvcManage();
5458
};

0 commit comments

Comments
 (0)