2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for CreateService
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
10 static int MakeService(SC_HANDLE hScm
, const wchar_t *serviceName
, SC_HANDLE
*hService
, DWORD
*tag
)
14 DWORD type
= 0, tagData
= 0, tagSize
;
17 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
18 *hService
= CreateServiceW(
23 SERVICE_KERNEL_DRIVER
,
26 L
"%systemroot%\\drivers\\win32k.sys",
27 L
"advapi32_apitest_CreateService_Test_Group",
33 ok(*hService
!= NULL
, "Failed to create service, error=0x%08lx\n", GetLastError());
36 skip("No service; cannot proceed with CreateService test\n");
40 ok_err(ERROR_SUCCESS
);
42 ok(*tag
!= 0, "tag is zero, expected nonzero\n");
44 StringCbPrintfW(keyName
, sizeof keyName
, L
"System\\CurrentControlSet\\Services\\%ls", serviceName
);
45 ret
= RegOpenKeyW(HKEY_LOCAL_MACHINE
, keyName
, &hKey
);
46 ok(ret
== ERROR_SUCCESS
, "RegOpenKeyW failed with 0x%08lx\n", ret
);
49 skip("No regkey; cannot proceed with CreateService test\n");
53 tagSize
= sizeof tagData
;
54 ret
= RegQueryValueExW(hKey
, L
"Tag", NULL
, &type
, (PBYTE
)&tagData
, &tagSize
);
55 ok(ret
== ERROR_SUCCESS
, "RegQueryValueExW returned 0x%08lx\n", ret
);
56 ok(type
== REG_DWORD
, "type=%lu, expected REG_DWORD\n", type
);
57 ok(tagSize
== sizeof tagData
, "tagSize=%lu, expected 4\n", tagSize
);
58 ok(tagData
== *tag
, "tag=%lu, but registry says %lu\n", *tag
, tagData
);
65 static void DestroyService(SC_HANDLE hService
)
71 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
72 ret
= DeleteService(hService
);
73 ok(ret
== TRUE
, "DeleteService returned %ld, expected 1\n", ret
);
74 ok(GetLastError() == DNS_ERROR_RCODE_NXRRSET
/* win7 */
75 || GetLastError() == ERROR_SUCCESS
/* win2k3 */, "DeleteService GetLastError()=0x%08lx\n", GetLastError());
77 CloseServiceHandle(hService
);
80 static void Test_CreateService(void)
82 SC_HANDLE hScm
= NULL
;
83 SC_HANDLE hService1
= NULL
, hService2
= NULL
;
84 SC_HANDLE hService3
= NULL
;
85 DWORD tag1
= 0, tag2
= 0;
88 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
89 hScm
= OpenSCManagerW(NULL
, NULL
, SC_MANAGER_CREATE_SERVICE
);
90 ok(hScm
!= NULL
, "Failed to open service manager, error=0x%08lx\n", GetLastError());
93 skip("No service control manager; cannot proceed with CreateService test\n");
97 ok_err(ERROR_SUCCESS
);
99 if (MakeService(hScm
, L
"advapi32_apitest_CreateService_Test_Service1", &hService1
, &tag1
))
102 if (MakeService(hScm
, L
"advapi32_apitest_CreateService_Test_Service2", &hService2
, &tag2
))
105 ok(tag1
!= tag2
, "tag1=%lu, tag2=%lu\n", tag1
, tag2
);
107 /* ask for a tag, but don't have a group */
108 hService3
= CreateServiceW(
110 L
"advapi32_apitest_CreateService_Test_Service2",
113 SERVICE_KERNEL_DRIVER
,
115 SERVICE_ERROR_IGNORE
,
116 L
"%systemroot%\\drivers\\win32k.sys",
122 ok(hService3
== NULL
, "hService3=%p\n", hService3
);
123 ok(GetLastError() == ERROR_INVALID_PARAMETER
, "error=%lu\n", GetLastError());
124 ok(tag3
== 785, "tag3=%lu\n", tag3
);
125 DestroyService(hService3
);
127 hService3
= CreateServiceW(
129 L
"advapi32_apitest_CreateService_Test_Service2",
132 SERVICE_KERNEL_DRIVER
,
134 SERVICE_ERROR_IGNORE
,
135 L
"%systemroot%\\drivers\\win32k.sys",
141 ok(hService3
== NULL
, "hService3=%p\n", hService3
);
142 ok(GetLastError() == ERROR_INVALID_PARAMETER
, "error=%lu\n", GetLastError());
143 ok(tag3
== 785, "tag3=%lu\n", tag3
);
144 DestroyService(hService3
);
148 DestroyService(hService2
);
149 DestroyService(hService1
);
152 CloseServiceHandle(hScm
);
155 START_TEST(CreateService
)
157 Test_CreateService();