2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for CreateService
5 * PROGRAMMER: Thomas Faber
13 static int MakeService(SC_HANDLE hScm
, const wchar_t *serviceName
, SC_HANDLE
*hService
, DWORD
*tag
)
17 DWORD type
= 0, tagData
= 0, tagSize
;
20 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
21 *hService
= CreateServiceW(
26 SERVICE_KERNEL_DRIVER
,
29 L
"%systemroot%\\drivers\\win32k.sys",
30 L
"advapi32_apitest_CreateService_Test_Group",
36 ok(*hService
!= NULL
, "Failed to create service, error=0x%08lx\n", GetLastError());
39 skip("No service; cannot proceed with CreateService test\n");
43 ok_err(ERROR_SUCCESS
);
45 ok(*tag
!= 0, "tag is zero, expected nonzero\n");
47 StringCbPrintfW(keyName
, sizeof keyName
, L
"System\\CurrentControlSet\\Services\\%ls", serviceName
);
48 ret
= RegOpenKeyW(HKEY_LOCAL_MACHINE
, keyName
, &hKey
);
49 ok(ret
== ERROR_SUCCESS
, "RegOpenKeyW failed with 0x%08lx\n", ret
);
52 skip("No regkey; cannot proceed with CreateService test\n");
56 tagSize
= sizeof tagData
;
57 ret
= RegQueryValueExW(hKey
, L
"Tag", NULL
, &type
, (PBYTE
)&tagData
, &tagSize
);
58 ok(ret
== ERROR_SUCCESS
, "RegQueryValueExW returned 0x%08lx\n", ret
);
59 ok(type
== REG_DWORD
, "type=%lu, expected REG_DWORD\n", type
);
60 ok(tagSize
== sizeof tagData
, "tagSize=%lu, expected 4\n", tagSize
);
61 ok(tagData
== *tag
, "tag=%lu, but registry says %lu\n", *tag
, tagData
);
68 static void DestroyService(SC_HANDLE hService
)
74 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
75 ret
= DeleteService(hService
);
76 ok(ret
== TRUE
, "DeleteService returned %ld, expected 1\n", ret
);
77 ok(GetLastError() == DNS_ERROR_RCODE_NXRRSET
/* win7 */
78 || GetLastError() == ERROR_SUCCESS
/* win2k3 */, "DeleteService GetLastError()=0x%08lx\n", GetLastError());
80 CloseServiceHandle(hService
);
83 static void Test_CreateService(void)
85 SC_HANDLE hScm
= NULL
;
86 SC_HANDLE hService1
= NULL
, hService2
= NULL
;
87 SC_HANDLE hService3
= NULL
;
88 DWORD tag1
= 0, tag2
= 0;
91 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
92 hScm
= OpenSCManagerW(NULL
, NULL
, SC_MANAGER_CREATE_SERVICE
);
93 ok(hScm
!= NULL
, "Failed to open service manager, error=0x%08lx\n", GetLastError());
96 skip("No service control manager; cannot proceed with CreateService test\n");
100 ok_err(ERROR_SUCCESS
);
102 if (MakeService(hScm
, L
"advapi32_apitest_CreateService_Test_Service1", &hService1
, &tag1
))
105 if (MakeService(hScm
, L
"advapi32_apitest_CreateService_Test_Service2", &hService2
, &tag2
))
108 ok(tag1
!= tag2
, "tag1=%lu, tag2=%lu\n", tag1
, tag2
);
110 /* ask for a tag, but don't have a group */
111 hService3
= CreateServiceW(
113 L
"advapi32_apitest_CreateService_Test_Service2",
116 SERVICE_KERNEL_DRIVER
,
118 SERVICE_ERROR_IGNORE
,
119 L
"%systemroot%\\drivers\\win32k.sys",
125 ok(hService3
== NULL
, "hService3=%p\n", hService3
);
126 ok(GetLastError() == ERROR_INVALID_PARAMETER
, "error=%lu\n", GetLastError());
127 ok(tag3
== 785, "tag3=%lu\n", tag3
);
128 DestroyService(hService3
);
130 hService3
= CreateServiceW(
132 L
"advapi32_apitest_CreateService_Test_Service2",
135 SERVICE_KERNEL_DRIVER
,
137 SERVICE_ERROR_IGNORE
,
138 L
"%systemroot%\\drivers\\win32k.sys",
144 ok(hService3
== NULL
, "hService3=%p\n", hService3
);
145 ok(GetLastError() == ERROR_INVALID_PARAMETER
, "error=%lu\n", GetLastError());
146 ok(tag3
== 785, "tag3=%lu\n", tag3
);
147 DestroyService(hService3
);
151 DestroyService(hService2
);
152 DestroyService(hService1
);
155 CloseServiceHandle(hScm
);
158 START_TEST(CreateService
)
160 Test_CreateService();