46{
47 SC_HANDLE hServiceManager =
NULL;
48 SC_HANDLE hService =
NULL;
52 DWORD dwDisposition, dwError;
55
56 DPRINT(
"RegisterService()\n");
57
59 if (hServiceManager ==
NULL)
60 {
61 DPRINT1(
"OpenSCManager() failed!\n");
63 goto done;
64 }
65
67 if (pszDisplayName ==
NULL)
68 {
69 DPRINT1(
"ReadString(IDS_DISPLAYNAME) failed!\n");
71 goto done;
72 }
73
75 if (pszDescription ==
NULL)
76 {
77 DPRINT1(
"ReadString(IDS_DESCRIPTION) failed!\n");
79 goto done;
80 }
81
84 pszDisplayName,
89 L"%SystemRoot%\\system32\\svchost.exe -k netsvcs",
91
93 {
95 }
97 {
98 DPRINT1(
"CreateService() failed!\n");
100 goto done;
101 }
102
106 &ServiceDescription) ==
FALSE)
107 {
108 DPRINT1(
"ChangeServiceConfig2() failed!\n");
110 goto done;
111 }
112
114 L"System\\CurrentControlSet\\Services\\W32Time\\Parameters",
115 0,
121 &dwDisposition);
123 {
124 DPRINT1(
"RegCreateKeyEx() failed!\n");
126 goto done;
127 }
128
129 pszValue =
L"%SystemRoot%\\system32\\w32time.dll";
132 0,
137 {
138 DPRINT1(
"RegSetValueEx() failed!\n");
140 goto done;
141 }
142
146 0,
151 {
152 DPRINT1(
"RegSetValueEx() failed!\n");
154 goto done;
155 }
156
157done:
160
161 if (hService)
163
164 if (hServiceManager)
166
167 if (pszDescription)
169
170 if (pszDisplayName)
172
173 return hresult;
174}
static PWSTR ReadString(_In_ UINT uID)
#define RegCloseKey(hKey)
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
#define HeapFree(x, y, z)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
#define REG_OPTION_NON_VOLATILE
_In_opt_ LPCSTR _In_opt_ LPCSTR pszValue
#define SERVICE_CONFIG_DESCRIPTION
#define SC_MANAGER_CREATE_SERVICE
#define SERVICE_CHANGE_CONFIG
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
SC_HANDLE WINAPI CreateServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, LPCWSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCWSTR lpBinaryPathName, LPCWSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCWSTR lpDependencies, LPCWSTR lpServiceStartName, LPCWSTR lpPassword)
BOOL WINAPI ChangeServiceConfig2W(SC_HANDLE hService, DWORD dwInfoLevel, LPVOID lpInfo)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
DWORD WINAPI GetLastError(void)
#define ERROR_SERVICE_EXISTS
#define HKEY_LOCAL_MACHINE
#define SERVICE_WIN32_SHARE_PROCESS
#define SERVICE_AUTO_START
#define SERVICE_ERROR_NORMAL