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>
14 static int MakeService(SC_HANDLE hScm
, const wchar_t *serviceName
, SC_HANDLE
*hService
, DWORD
*tag
)
18 DWORD type
= 0, tagData
= 0, tagSize
;
21 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
22 *hService
= CreateServiceW(
27 SERVICE_KERNEL_DRIVER
,
30 L
"%systemroot%\\drivers\\win32k.sys",
31 L
"advapi32_apitest_CreateService_Test_Group",
37 ok(*hService
!= NULL
, "Failed to create service, error=0x%08lx\n", GetLastError());
40 skip("No service; cannot proceed with CreateService test\n");
44 ok_err(ERROR_SUCCESS
);
46 ok(*tag
!= 0, "tag is zero, expected nonzero\n");
48 StringCbPrintfW(keyName
, sizeof keyName
, L
"System\\CurrentControlSet\\Services\\%ls", serviceName
);
49 ret
= RegOpenKeyW(HKEY_LOCAL_MACHINE
, keyName
, &hKey
);
50 ok(ret
== ERROR_SUCCESS
, "RegOpenKeyW failed with 0x%08lx\n", ret
);
53 skip("No regkey; cannot proceed with CreateService test\n");
57 tagSize
= sizeof tagData
;
58 ret
= RegQueryValueExW(hKey
, L
"Tag", NULL
, &type
, (PBYTE
)&tagData
, &tagSize
);
59 ok(ret
== ERROR_SUCCESS
, "RegQueryValueExW returned 0x%08lx\n", ret
);
60 ok(type
== REG_DWORD
, "type=%lu, expected REG_DWORD\n", type
);
61 ok(tagSize
== sizeof tagData
, "tagSize=%lu, expected 4\n", tagSize
);
62 ok(tagData
== *tag
, "tag=%lu, but registry says %lu\n", *tag
, tagData
);
69 static void DestroyService(SC_HANDLE hService
)
75 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
76 ret
= DeleteService(hService
);
77 ok(ret
== TRUE
, "DeleteService returned %ld, expected 1\n", ret
);
78 ok(GetLastError() == DNS_ERROR_RCODE_NXRRSET
/* win7 */
79 || GetLastError() == ERROR_SUCCESS
/* win2k3 */, "DeleteService GetLastError()=0x%08lx\n", GetLastError());
81 CloseServiceHandle(hService
);
84 static void Test_CreateService(void)
86 SC_HANDLE hScm
= NULL
;
87 SC_HANDLE hService1
= NULL
, hService2
= NULL
;
88 SC_HANDLE hService3
= NULL
;
89 DWORD tag1
= 0, tag2
= 0;
92 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
93 hScm
= OpenSCManagerW(NULL
, NULL
, SC_MANAGER_CREATE_SERVICE
);
94 ok(hScm
!= NULL
, "Failed to open service manager, error=0x%08lx\n", GetLastError());
97 skip("No service control manager; cannot proceed with CreateService test\n");
101 ok_err(ERROR_SUCCESS
);
103 if (MakeService(hScm
, L
"advapi32_apitest_CreateService_Test_Service1", &hService1
, &tag1
))
106 if (MakeService(hScm
, L
"advapi32_apitest_CreateService_Test_Service2", &hService2
, &tag2
))
109 ok(tag1
!= tag2
, "tag1=%lu, tag2=%lu\n", tag1
, tag2
);
111 /* ask for a tag, but don't have a group */
112 hService3
= CreateServiceW(
114 L
"advapi32_apitest_CreateService_Test_Service2",
117 SERVICE_KERNEL_DRIVER
,
119 SERVICE_ERROR_IGNORE
,
120 L
"%systemroot%\\drivers\\win32k.sys",
126 ok(hService3
== NULL
, "hService3=%p\n", hService3
);
127 ok(GetLastError() == ERROR_INVALID_PARAMETER
, "error=%lu\n", GetLastError());
128 ok(tag3
== 785, "tag3=%lu\n", tag3
);
129 DestroyService(hService3
);
131 hService3
= CreateServiceW(
133 L
"advapi32_apitest_CreateService_Test_Service2",
136 SERVICE_KERNEL_DRIVER
,
138 SERVICE_ERROR_IGNORE
,
139 L
"%systemroot%\\drivers\\win32k.sys",
145 ok(hService3
== NULL
, "hService3=%p\n", hService3
);
146 ok(GetLastError() == ERROR_INVALID_PARAMETER
, "error=%lu\n", GetLastError());
147 ok(tag3
== 785, "tag3=%lu\n", tag3
);
148 DestroyService(hService3
);
152 DestroyService(hService2
);
153 DestroyService(hService1
);
156 CloseServiceHandle(hScm
);
159 START_TEST(CreateService
)
161 Test_CreateService();