60 pChangeServiceConfig2A = (
void*)
GetProcAddress(hadvapi32,
"ChangeServiceConfig2A");
61 pChangeServiceConfig2W = (
void*)
GetProcAddress(hadvapi32,
"ChangeServiceConfig2W");
62 pEnumServicesStatusExA= (
void*)
GetProcAddress(hadvapi32,
"EnumServicesStatusExA");
63 pEnumServicesStatusExW= (
void*)
GetProcAddress(hadvapi32,
"EnumServicesStatusExW");
64 pQueryServiceConfig2A= (
void*)
GetProcAddress(hadvapi32,
"QueryServiceConfig2A");
65 pQueryServiceConfig2W= (
void*)
GetProcAddress(hadvapi32,
"QueryServiceConfig2W");
66 pQueryServiceStatusEx= (
void*)
GetProcAddress(hadvapi32,
"QueryServiceStatusEx");
67 pQueryServiceObjectSecurity = (
void*)
GetProcAddress(hadvapi32,
"QueryServiceObjectSecurity");
68 pNotifyServiceStatusChangeW = (
void*)
GetProcAddress(hadvapi32,
"NotifyServiceStatusChangeW");
104 "Expected RPC_S_SERVER_UNAVAILABLE or RPC_S_INVALID_NET_ADDR, got %ld\n",
GetLastError());
125 CHAR displayname[4096];
131 ok(!svc_handle,
"Expected failure\n");
140 ok(!svc_handle,
"Expected failure\n");
143 "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
150 ok(!svc_handle,
"Expected failure\n");
159 skip(
"Not enough rights to get a handle to the service\n");
178 skip(
"displayname equals servicename\n");
185 ok(!svc_handle,
"Expected failure\n");
195 SC_HANDLE
scm_handle, svc_handle1, svc_handle2;
199 static const CHAR servicename [] =
"winetest_create_delete";
217 svc_handle1 =
CreateServiceA(
NULL,
NULL,
NULL, 0, 0, 0, 0,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
218 ok(!svc_handle1,
"Expected failure\n");
225 svc_handle1 =
CreateServiceA(
scm_handle,
NULL,
NULL, 0, 0, 0, 0,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
226 ok(!svc_handle1,
"Expected failure\n");
229 "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
233 svc_handle1 =
CreateServiceA(
scm_handle, servicename,
NULL, 0, 0, 0, 0,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
234 ok(!svc_handle1,
"Expected failure\n");
237 "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
241 svc_handle1 =
CreateServiceA(
scm_handle,
NULL,
NULL, 0, 0, 0, 0,
pathname,
NULL,
NULL,
NULL,
NULL,
NULL);
242 ok(!svc_handle1,
"Expected failure\n");
245 "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
249 svc_handle1 =
CreateServiceA(
scm_handle, servicename,
NULL, 0, 0, 0, 0,
pathname,
NULL,
NULL,
NULL,
NULL,
NULL);
250 ok(!svc_handle1,
"Expected failure\n");
255 svc_handle1 =
CreateServiceA(
scm_handle,
empty,
NULL, 0, 0, 0, 0,
pathname,
NULL,
NULL,
NULL,
NULL,
NULL);
256 ok(!svc_handle1,
"Expected failure\n");
260 svc_handle1 =
CreateServiceA(
scm_handle, servicename,
NULL, 0, 0, 0, 0,
empty,
NULL,
NULL,
NULL,
NULL,
NULL);
261 ok(!svc_handle1,
"Expected failure\n");
272 skip(
"Not enough rights to get a handle to the manager\n");
280 svc_handle1 =
CreateServiceA(
scm_handle,
empty,
NULL, 0, 0, 0, 0,
pathname,
NULL,
NULL,
NULL,
NULL,
NULL);
281 ok(!svc_handle1,
"Expected failure\n");
285 svc_handle1 =
CreateServiceA(
scm_handle, servicename,
NULL, 0, 0, 0, 0,
empty,
NULL,
NULL,
NULL,
NULL,
NULL);
286 ok(!svc_handle1,
"Expected failure\n");
290 svc_handle1 =
CreateServiceA(
scm_handle,
empty,
NULL, 0, 0, 0, 0,
empty,
NULL,
NULL,
NULL,
NULL,
NULL);
291 ok(!svc_handle1,
"Expected failure\n");
300 ok(!svc_handle1,
"Expected failure\n");
311 ok(!svc_handle1,
"Expected failure\n");
318 ok(!svc_handle1,
"Expected failure\n");
327 ok(!svc_handle1,
"Expected failure\n");
329 "Expected ERROR_INVALID_PARAMETER or ERROR_INVALID_SERVICE_ACCOUNT, got %ld\n",
GetLastError());
338 ok(!svc_handle1,
"Expected failure\n");
345 ok(!svc_handle1,
"Expected failure\n");
352 ok(!svc_handle1,
"Expected failure\n");
358 ok(!!svc_handle1,
"Failed to create service, error %lu\n",
GetLastError());
362 ok(!svc_handle2,
"Expected failure\n");
407 ok(!
ret,
"Expected failure\n");
409 "Expected ERROR_ACCESS_DENIED, got %ld\n",
GetLastError());
433 ok(!
ret,
"Expected failure\n");
435 "Expected ERROR_INVALID_HANDLE, got %ld\n",
GetLastError());
442 CHAR displayname[4096];
444 DWORD displaysize, tempsize, tempsizeW;
445 static const CHAR deadbeef[] =
"Deadbeef";
446 static const WCHAR spoolerW[] = {
'S',
'p',
'o',
'o',
'l',
'e',
'r',0};
447 static const WCHAR deadbeefW[] = {
'D',
'e',
'a',
'd',
'b',
'e',
'e',
'f',0};
448 static const WCHAR abcW[] = {
'A',
'B',
'C',0};
449 static const CHAR servicename[] =
"winetest_displayname";
456 ok(!
ret,
"Expected failure\n");
458 "Expected ERROR_INVALID_HANDLE, got %ld\n",
GetLastError());
464 ok(!
ret,
"Expected failure\n");
467 "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
470 displaysize =
sizeof(displayname);
472 ok(!
ret,
"Expected failure\n");
475 "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
481 ok(!
ret,
"Expected failure\n");
483 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
487 ok(!
ret,
"Expected failure\n");
489 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
490 todo_wine ok(displaysize == 1,
"Service size expected 1, got %ld\n", displaysize);
493 strcpy(displayname,
"ABC");
495 ok(!
ret,
"Expected failure\n");
497 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
498 todo_wine ok(displaysize == 15,
"Service size expected 15, got %ld\n", displaysize);
499 ok(displayname[0] == 0,
"Service name not empty\n");
504 ok(!
ret,
"Expected failure\n");
506 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
507 ok(displaysize == 15,
"Service size expected 15, got %ld\n", displaysize);
511 strcpy(displayname,
"ABC");
513 ok(!
ret,
"Expected failure\n");
515 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
516 todo_wine ok(displaysize == 1,
"Service size expected 1, got %ld\n", displaysize);
517 ok(displayname[0] ==
'A',
"Service name changed\n");
522 ok(!
ret,
"Expected failure\n");
523 ok(displaysize == 2,
"Service size expected 2, got %ld\n", displaysize);
525 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
529 strcpy(displayname,
"ABC");
531 ok(!
ret,
"Expected failure\n");
533 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
534 todo_wine ok(displaysize == 1,
"Service size expected 1, got %ld\n", displaysize);
535 ok(displayname[0] == 0,
"Service name not empty\n");
540 ok(!
ret,
"Expected failure\n");
541 ok(displaysize == 2,
"Service size expected 2, got %ld\n", displaysize);
543 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
547 strcpy(displayname,
"ABC");
549 ok(!
ret,
"Expected failure\n");
551 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
552 todo_wine ok(displaysize == 2,
"Service size expected 2, got %ld\n", displaysize);
553 ok(displayname[0] == 0,
"Service name not empty\n");
558 ok(!
ret,
"Expected failure\n");
559 ok(displaysize == 2,
"Service size expected 2, got %ld\n", displaysize);
561 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
568 skip(
"Spooler service doesn't exist\n");
578 ok(!
ret,
"Expected failure\n");
580 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
581 tempsize = displaysize;
585 ok(!
ret,
"Expected failure\n");
587 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
588 ok(displaysize == tempsize,
"Buffer size mismatch (%ld vs %ld)\n", tempsize, displaysize);
592 displaysize = (tempsize / 2);
594 ok(!
ret,
"Expected failure\n");
595 ok(displaysize == tempsize,
"Expected the needed buffersize\n");
597 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
604 displaysize = (tempsize / 2) + 1;
607 ok(displaysize == ((tempsize / 2) + 1),
"Expected no change for the needed buffer size\n");
611 displaysize = tempsize;
614 ok(displaysize == tempsize,
"Expected no change for the needed buffer size\n");
618 displaysize = tempsize * 2;
622 ok(displaysize == tempsize * 2,
"Expected no change for the needed buffer size\n");
623 ok(
strlen(displayname) == tempsize/2,
624 "Expected the buffer to be twice the length of the string\n") ;
630 ok(!
ret,
"Expected failure\n");
632 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
636 tempsizeW = displaysize;
637 displaysize = tempsizeW / 2;
639 ok(!
ret,
"Expected failure\n");
640 ok(displaysize == tempsizeW,
"Expected the needed buffersize\n");
642 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
646 displaysize = tempsizeW;
648 ok(!
ret,
"Expected failure\n");
649 ok(displaysize == tempsizeW,
"Expected the needed buffersize\n");
651 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
655 displaysize = tempsizeW + 1;
658 ok(displaysize == tempsizeW,
"Expected the needed buffersize\n");
660 "Expected the buffer to be the length of the string\n") ;
661 ok(tempsize / 2 == tempsizeW,
662 "Expected the needed buffersize (in bytes) to be the same for the A and W call\n");
673 skip(
"Not enough rights to get a handle to the manager\n");
692 ok(!
ret,
"Expected failure\n");
693 ok(displaysize ==
strlen(servicename) * 2,
694 "Expected the displaysize to be twice the size of the servicename\n");
696 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
700 tempsize = displaysize;
701 displaysize = (tempsize / 2);
703 ok(!
ret,
"Expected failure\n");
704 ok(displaysize == tempsize,
"Expected the needed buffersize\n");
706 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
713 "Expected displayname to be %s, got %s\n", servicename, displayname);
726 CHAR servicename[4096];
727 CHAR displayname[4096];
728 WCHAR servicenameW[4096];
730 DWORD servicesize, displaysize, tempsize;
732 static const CHAR deadbeef[] =
"Deadbeef";
733 static const WCHAR deadbeefW[] = {
'D',
'e',
'a',
'd',
'b',
'e',
'e',
'f',0};
734 static const WCHAR abcW[] = {
'A',
'B',
'C',0};
740 ok(!
ret,
"Expected failure\n");
742 "Expected ERROR_INVALID_HANDLE, got %ld\n",
GetLastError());
749 ok(!
ret,
"Expected failure\n");
752 "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
753 todo_wine ok(servicesize == 1,
"Service size expected 1, got %ld\n", servicesize);
759 ok(!
ret,
"Expected failure\n");
762 "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
763 todo_wine ok(servicesize == 200,
"Service size expected 1, got %ld\n", servicesize);
768 ok(!
ret,
"Expected failure\n");
770 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
771 todo_wine ok(servicesize == 1,
"Service size expected 1, got %ld\n", servicesize);
774 strcpy(servicename,
"ABC");
776 ok(!
ret,
"Expected failure\n");
778 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
779 todo_wine ok(servicesize == 15,
"Service size expected 15, got %ld\n", servicesize);
780 ok(servicename[0] == 0,
"Service name not empty\n");
785 ok(!
ret,
"Expected failure\n");
787 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
788 ok(servicesize == 15,
"Service size expected 15, got %ld\n", servicesize);
789 ok(servicenameW[0] == 0,
"Service name not empty\n");
792 strcpy(servicename,
"ABC");
794 ok(!
ret,
"Expected failure\n");
796 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
797 todo_wine ok(servicesize == 1,
"Service size expected 1, got %ld\n", servicesize);
798 ok(servicename[0] ==
'A',
"Service name changed\n");
803 ok(!
ret,
"Expected failure\n");
804 ok(servicesize == 2,
"Service size expected 2, got %ld\n", servicesize);
806 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
807 ok(servicenameW[0] ==
'A',
"Service name changed\n");
810 strcpy(servicename,
"ABC");
812 ok(!
ret,
"Expected failure\n");
814 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
815 todo_wine ok(servicesize == 1,
"Service size expected 1, got %ld\n", servicesize);
816 ok(servicename[0] == 0,
"Service name not empty\n");
821 ok(!
ret,
"Expected failure\n");
822 ok(servicesize == 2,
"Service size expected 2, got %ld\n", servicesize);
824 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
825 ok(servicenameW[0] ==
'A',
"Service name changed\n");
828 strcpy(servicename,
"ABC");
830 ok(!
ret,
"Expected failure\n");
832 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
833 todo_wine ok(servicesize == 2,
"Service size expected 2, got %ld\n", servicesize);
834 ok(servicename[0] == 0,
"Service name not empty\n");
839 ok(!
ret,
"Expected failure\n");
840 ok(servicesize == 2,
"Service size expected 2, got %ld\n", servicesize);
842 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
843 ok(servicenameW[0] == 0,
"Service name not empty\n");
849 skip(
"Spooler service doesn't exist\n");
863 ok(!
ret,
"Expected failure\n");
864 if (
strcmp(displayname,
"Print Spooler") != 0 &&
867 win_skip(
"GetServiceKeyName() does not support localized display names: %s\n", displayname);
873 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
877 tempsize = servicesize;
883 ok(
strlen(servicename) == tempsize/2,
884 "Expected the buffer to be twice the length of the string\n") ;
886 ok(servicesize == (tempsize * 2),
887 "Expected servicesize not to change if buffer not insufficient\n") ;
897 ok(
strlen(servicename) == tempsize/2,
898 "Expected the buffer to be twice the length of the string\n") ;
900 "Expected servicesize not to change if buffer not insufficient\n") ;
906 ok(!
ret,
"Expected failure\n");
908 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
909 ok(servicenameW[0] == 0,
"Buffer not empty\n");
925 ok(!
ret,
"Expected failure\n");
927 "Expected ERROR_INVALID_HANDLE, got %ld\n",
GetLastError());
937 skip(
"Spooler service doesn't exist\n");
944 ok(!
ret,
"Expected failure\n");
951 ok(!
ret,
"Expected failure\n");
953 "Expected ERROR_ACCESS_DENIED, got %ld\n",
GetLastError());
968 if (!pQueryServiceStatusEx)
970 win_skip(
"QueryServiceStatusEx not available\n" );
981 ok(!
ret,
"Expected failure\n");
983 "Expected ERROR_INVALID_LEVEL, got %ld\n",
GetLastError());
995 ok(!
ret,
"Expected failure\n");
997 "Needed buffersize is wrong : %ld\n", needed);
999 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
1007 ok(!
ret,
"Expected failure\n");
1009 "Expected ERROR_INVALID_HANDLE, got %ld\n",
GetLastError());
1018 ok(!
ret,
"Expected failure\n");
1020 "Needed buffersize is wrong : %ld\n", needed);
1022 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
1030 ok(!
ret,
"Expected failure\n");
1032 "Expected ERROR_ACCESS_DENIED, got %ld\n",
GetLastError());
1047 "Expect a process id for this running service\n");
1050 "Expect no process id for this stopped service\n");
1055 ok(!
ret,
"Expected failure\n");
1070 DWORD neededA, returnedA;
1071 DWORD tempneeded, tempreturned, missing;
1072 DWORD servicecountactive, servicecountinactive;
1080 ok(!
ret,
"Expected failure\n");
1082 "Expected ERROR_INVALID_HANDLE, got %ld\n",
GetLastError());
1086 ok(!
ret,
"Expected failure\n");
1088 "Expected ERROR_INVALID_HANDLE, got %ld\n",
GetLastError());
1096 ok(!
ret,
"Expected failure\n");
1103 ok(!
ret,
"Expected failure\n");
1109 returned = 0xdeadbeef;
1112 ok(!
ret,
"Expected failure\n");
1113 ok(returned == 0xdeadbeef,
"Expected no change to the number of services variable\n");
1118 returned = 0xdeadbeef;
1121 ok(!
ret,
"Expected failure\n");
1122 ok(returned == 0xdeadbeef,
"Expected no change to the number of services variable\n");
1128 needed = 0xdeadbeef;
1131 ok(!
ret,
"Expected failure\n");
1132 ok(needed == 0xdeadbeef ||
broken(needed != 0xdeadbeef),
1133 "Expected no change to the needed buffer variable\n");
1138 needed = 0xdeadbeef;
1141 ok(!
ret,
"Expected failure\n");
1142 ok(needed == 0xdeadbeef ||
broken(needed != 0xdeadbeef),
1143 "Expected no change to the needed buffer variable\n");
1149 needed = 0xdeadbeef;
1150 returned = 0xdeadbeef;
1153 ok(!
ret,
"Expected failure\n");
1154 ok(needed == 0 ||
broken(needed != 0),
1155 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1156 ok(returned == 0,
"Expected number of services to be set to 0, got %ld\n", returned);
1158 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1160 needed = 0xdeadbeef;
1161 returned = 0xdeadbeef;
1164 ok(!
ret,
"Expected failure\n");
1165 ok(needed == 0 ||
broken(needed != 0),
1166 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1167 ok(returned == 0 ||
broken(returned != 0),
1168 "Expected number of services to be set to 0, got %ld\n", returned);
1170 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1173 needed = 0xdeadbeef;
1174 returned = 0xdeadbeef;
1177 ok(!
ret,
"Expected failure\n");
1178 ok(needed == 0 ||
broken(needed != 0),
1179 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1180 ok(returned == 0,
"Expected number of services to be set to 0, got %ld\n", returned);
1182 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1184 needed = 0xdeadbeef;
1185 returned = 0xdeadbeef;
1188 ok(!
ret,
"Expected failure\n");
1189 ok(needed == 0 ||
broken(needed != 0),
1190 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1191 ok(returned == 0 ||
broken(returned != 0),
1192 "Expected number of services to be set to 0, got %ld\n", returned);
1194 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1197 needed = 0xdeadbeef;
1198 returned = 0xdeadbeef;
1201 ok(!
ret,
"Expected failure\n");
1202 ok(needed == 0 ||
broken(needed != 0),
1203 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1204 ok(returned == 0,
"Expected number of services to be set to 0, got %ld\n", returned);
1206 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1208 needed = 0xdeadbeef;
1209 returned = 0xdeadbeef;
1212 ok(!
ret,
"Expected failure\n");
1213 ok(needed == 0 ||
broken(needed != 0),
1214 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1215 ok(returned == 0 ||
broken(returned != 0),
1216 "Expected number of services to be set to 0, got %ld\n", returned);
1218 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1221 needed = 0xdeadbeef;
1222 returned = 0xdeadbeef;
1225 ok(!
ret,
"Expected failure\n");
1226 ok(needed == 0 ||
broken(needed != 0),
1227 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1228 ok(returned == 0,
"Expected number of services to be set to 0, got %ld\n", returned);
1230 "Expected ERROR_ACCESS_DENIED, got %ld\n",
GetLastError());
1232 needed = 0xdeadbeef;
1233 returned = 0xdeadbeef;
1236 ok(!
ret,
"Expected failure\n");
1237 ok(needed == 0 ||
broken(needed != 0),
1238 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1239 ok(returned == 0 ||
broken(returned != 0),
1240 "Expected number of services to be set to 0, got %ld\n", returned);
1242 "Expected ERROR_ACCESS_DENIED, got %ld\n",
GetLastError());
1249 needed = 0xdeadbeef;
1250 returned = 0xdeadbeef;
1253 ok(!
ret,
"Expected failure\n");
1254 ok(needed != 0xdeadbeef && needed > 0,
"Expected the needed buffer size for this one service\n");
1255 ok(returned == 0,
"Expected no service returned, got %ld\n", returned);
1257 "Expected ERROR_MORE_DATA, got %ld\n",
GetLastError());
1260 neededA = 0xdeadbeef;
1261 returnedA = 0xdeadbeef;
1264 ok(!
ret,
"Expected failure\n");
1266 "Expected ERROR_MORE_DATA, got %ld\n",
GetLastError());
1267 ok(neededA != 0xdeadbeef && neededA > 0,
"Expected the needed buffer size for this one service\n");
1268 ok(returnedA == 0,
"Expected no service returned, got %ld\n", returnedA);
1269 if (neededA != needed && attempt)
1271 ok(neededA == needed,
"Expected needed buffersize to be the same for A- and W-calls\n");
1274 tempneeded = needed;
1279 needed = 0xdeadbeef;
1280 returned = 0xdeadbeef;
1288 ok(needed == 0,
"Expected needed buffer to be 0 as we are done\n");
1289 ok(returned != 0xdeadbeef && returned > 0,
"Expected some returned services\n");
1292 tempreturned = returned;
1294 servicesA =
malloc(neededA);
1296 neededA = 0xdeadbeef;
1297 returnedA = 0xdeadbeef;
1305 win_skip(
"Skipping some tests due to EnumServicesStatusA()'s broken UTF-8 support\n");
1309 ok(neededA == 0,
"Expected needed buffer to be 0 as we are done\n");
1310 ok(returnedA != 0xdeadbeef && returnedA > 0,
"Expected some returned services\n");
1319 needed = 0xdeadbeef;
1320 returned = 0xdeadbeef;
1324 if (
ret && needed == 0 && attempt)
1329 ok(!
ret,
"Expected failure\n");
1330 ok(needed != 0xdeadbeef && needed > 0,
"Expected the needed buffer size\n");
1331 todo_wine ok(needed < tempneeded,
"Expected a smaller needed buffer size for the missing services\n");
1335 ok(returned < tempreturned,
"Expected fewer services to be returned\n");
1337 "Expected ERROR_MORE_DATA, got %ld\n",
GetLastError());
1341 needed = 0xdeadbeef;
1342 returned = 0xdeadbeef;
1347 if (
ret && needed == 0 && attempt)
1352 ok(!
ret,
"Expected failure\n");
1353 ok(needed != 0xdeadbeef && needed > 0,
"Expected the needed buffer size for the missing services, got %lx\n", needed);
1354 todo_wine ok(needed < tempneeded,
"Expected < %lu bytes needed for the remaining services, got %lu\n", tempneeded, needed);
1355 ok(returned < tempreturned,
"Expected < %lu remaining services, got %lu\n", tempreturned, returned);
1356 todo_wine ok(resume,
"Expected a resume handle\n");
1358 "Expected ERROR_MORE_DATA, got %ld\n",
GetLastError());
1361 missing = tempreturned - returned;
1363 needed = 0xdeadbeef;
1364 returned = 0xdeadbeef;
1372 ok(needed == 0,
"Expected 0 needed bytes as we are done, got %lu\n", needed);
1375 todo_wine ok(returned == missing,
"Expected %lu remaining services, got %lu\n", missing, returned);
1376 ok(resume == 0,
"Expected the resume handle to be 0\n");
1392 &needed, &returned,
NULL);
1400 servicecountactive = returned;
1404 &needed, &returned,
NULL);
1412 servicecountinactive = returned;
1416 &needed, &returned,
NULL);
1425 if (returned != servicecountactive + servicecountinactive && attempt)
1427 ok(returned == servicecountactive + servicecountinactive,
1428 "Expected service count %ld == %ld + %ld\n",
1429 returned, servicecountactive, servicecountinactive);
1437 NULL, 0, &needed, &returned,
NULL);
1446 for (
i = 0;
ret &&
i < returned;
i++)
1451 ok(
services[
i].lpServiceName[0],
"Expected a service name\n");
1459 switch (
status.dwCurrentState)
1466 trace(
"Got state %lx for service %s\n",
status.dwCurrentState,
1471 servicecountactive--;
1475 servicecountinactive--;
1479 ok(0,
"Got unknown state %lx for service %s\n",
1487 if ((servicecountactive || servicecountinactive) && attempt)
1489 ok(servicecountactive == 0,
"Active services mismatch %lu\n", servicecountactive);
1490 ok(servicecountinactive == 0,
"Inactive services mismatch %lu\n", servicecountinactive);
1504 DWORD neededA, returnedA;
1505 DWORD tempneeded, tempreturned, missing;
1506 DWORD servicecountactive, servicecountinactive;
1512 if (!pEnumServicesStatusExA)
1514 win_skip(
"EnumServicesStatusExA not available\n" );
1521 ok(!
ret,
"Expected failure\n");
1523 "Expected ERROR_INVALID_LEVEL, got %ld\n",
GetLastError());
1528 ok(!
ret,
"Expected failure\n");
1530 "Expected ERROR_INVALID_HANDLE, got %ld\n",
GetLastError());
1538 ok(!
ret,
"Expected failure\n");
1544 needed = 0xdeadbeef;
1547 ok(!
ret,
"Expected failure\n");
1548 ok(needed == 0xdeadbeef ||
broken(needed != 0xdeadbeef),
1549 "Expected no change to the needed buffer variable\n");
1555 returned = 0xdeadbeef;
1558 ok(!
ret,
"Expected failure\n");
1559 ok(returned == 0xdeadbeef,
"Expected no change to the number of services variable\n");
1565 needed = 0xdeadbeef;
1566 returned = 0xdeadbeef;
1569 ok(!
ret,
"Expected failure\n");
1570 ok(returned == 0,
"Expected number of service to be set to 0, got %ld\n", returned);
1571 ok(needed == 0 ||
broken(needed != 0),
1572 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1574 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1577 needed = 0xdeadbeef;
1578 returned = 0xdeadbeef;
1582 ok(!
ret,
"Expected failure\n");
1583 ok(returned == 0,
"Expected number of service to be set to 0, got %ld\n", returned);
1584 ok(needed == 0 ||
broken(needed != 0),
1585 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1587 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1590 needed = 0xdeadbeef;
1591 returned = 0xdeadbeef;
1595 ok(!
ret,
"Expected failure\n");
1596 ok(returned == 0,
"Expected number of service to be set to 0, got %ld\n", returned);
1597 ok(needed == 0 ||
broken(needed != 0),
1598 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1600 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1603 needed = 0xdeadbeef;
1604 returned = 0xdeadbeef;
1607 &returned,
NULL,
"deadbeef_group");
1608 ok(!
ret,
"Expected failure\n");
1609 ok(returned == 0,
"Expected number of service to be set to 0, got %ld\n", returned);
1610 ok(needed == 0 ||
broken(needed != 0),
1611 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1613 "Expected ERROR_INVALID_PARAMETER, got %ld\n",
GetLastError());
1616 needed = 0xdeadbeef;
1617 returned = 0xdeadbeef;
1621 ok(!
ret,
"Expected failure\n");
1622 ok(needed == 0 ||
broken(needed != 0),
1623 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1624 ok(returned == 0,
"Expected number of service to be set to 0, got %ld\n", returned);
1626 "Expected ERROR_ACCESS_DENIED, got %ld\n",
GetLastError());
1631 needed = 0xdeadbeef;
1632 returned = 0xdeadbeef;
1635 NULL, 0, &needed, &returned,
NULL,
"deadbeef_group");
1636 ok(!
ret,
"Expected failure\n");
1637 ok(needed == 0 ||
broken(needed != 0),
1638 "Expected needed buffer size to be set to 0, got %ld\n", needed);
1639 ok(returned == 0,
"Expected number of service to be set to 0, got %ld\n", returned);
1641 "Expected ERROR_ACCESS_DENIED, got %ld\n",
GetLastError());
1648 needed = 0xdeadbeef;
1649 returned = 0xdeadbeef;
1652 NULL, 0, &needed, &returned,
NULL,
L"deadbeef_group");
1653 ok(!
ret,
"Expected failure\n");
1654 ok(returned == 0,
"Expected number of service to be set to 0, got %ld\n", returned);
1655 ok(needed == 0,
"Expected needed buffer size to be set to 0, got %ld\n", needed);
1657 "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %ld\n",
GetLastError());
1664 needed = 0xdeadbeef;
1665 returned = 0xdeadbeef;
1669 ok(!
ret,
"Expected failure\n");
1670 ok(returned == 0,
"Expected no service returned, got %ld\n", returned);
1671 ok(needed != 0xdeadbeef && needed > 0,
"Expected the needed buffer size\n");
1673 "Expected ERROR_MORE_DATA, got %ld\n",
GetLastError());
1676 neededA = 0xdeadbeef;
1677 returnedA = 0xdeadbeef;
1681 ok(!
ret,
"Expected failure\n");
1683 "Expected ERROR_MORE_DATA, got %ld\n",
GetLastError());
1684 ok(neededA != 0xdeadbeef && neededA > 0,
"Expected the needed buffer size for this one service\n");
1685 ok(returnedA == 0,
"Expected no service returned, got %ld\n", returnedA);
1686 if (neededA != needed && attempt)
1688 ok(neededA == needed,
"Expected needed buffersize to be the same for A- and W-calls\n");
1690 "Expected ERROR_MORE_DATA, got %ld\n",
GetLastError());
1693 tempneeded = needed;
1697 NULL, 0, &needed, &returned,
NULL);
1699 returned = 0xdeadbeef;
1706 ok(needed == 0,
"Expected needed buffer to be 0 as we are done\n");
1707 ok(returned != 0xdeadbeef && returned > 0,
"Expected some returned services\n");
1710 tempreturned = returned;
1713 exservices =
malloc(tempneeded);
1715 needed = 0xdeadbeef;
1716 returned = 0xdeadbeef;
1724 ok(needed == 0,
"Expected needed buffer to be 0 as we are done\n");
1725 ok(returned == tempreturned,
"Expected the same number of service from this function\n");
1728 tempreturned = returned;
1734 exservices =
malloc(tempneeded);
1736 needed = 0xdeadbeef;
1737 returned = 0xdeadbeef;
1741 if (
ret && needed == 0 && attempt)
1746 ok(!
ret,
"Expected failure\n");
1747 ok(needed != 0xdeadbeef && needed > 0,
"Expected the needed buffer size for the missing services\n");
1748 todo_wine ok(needed < tempneeded,
"Expected a smaller needed buffer size for the missing services\n");
1752 ok(returned < tempreturned,
"Expected fewer services to be returned\n");
1754 "Expected ERROR_MORE_DATA, got %ld\n",
GetLastError());
1758 needed = 0xdeadbeef;
1759 returned = 0xdeadbeef;
1764 if (
ret && needed == 0 && attempt)
1769 ok(!
ret,
"Expected failure\n");
1770 ok(needed != 0xdeadbeef && needed > 0,
"Expected the needed buffer size for the missing services\n");
1771 todo_wine ok(needed < tempneeded,
"Expected a smaller needed buffer size for the missing services\n");
1772 ok(returned < tempreturned,
"Expected fewer services to be returned\n");
1773 todo_wine ok(resume,
"Expected a resume handle\n");
1775 "Expected ERROR_MORE_DATA, got %ld\n",
GetLastError());
1778 missing = tempreturned - returned;
1780 needed = 0xdeadbeef;
1781 returned = 0xdeadbeef;
1789 ok(needed == 0,
"Expected needed buffer to be 0 as we are done\n");
1790 ok(returned == missing,
"Expected %lu services to be returned\n", missing);
1791 ok(resume == 0,
"Expected the resume handle to be 0\n");
1798 exservices =
malloc(needed);
1800 (
BYTE*)exservices, needed, &needed, &returned,
NULL,
NULL);
1805 servicecountactive = returned;
1810 exservices =
malloc(needed);
1812 (
BYTE*)exservices, needed, &needed, &returned,
NULL,
NULL);
1817 servicecountinactive = returned;
1822 exservices =
malloc(needed);
1824 (
BYTE*)exservices, needed, &needed, &returned,
NULL,
NULL);
1830 if (returned != servicecountactive + servicecountinactive && attempt)
1832 ok(returned == servicecountactive + servicecountinactive,
1833 "Expected service count %ld == %ld + %ld\n",
1834 returned, servicecountactive, servicecountinactive);
1839 ok(!
ret,
"Expected failure\n");
1840 exservices =
malloc(needed);
1848 for (
i = 0;
i < returned;
i++)
1853 ok(exservices[
i].lpServiceName[0],
"Expected a service name\n");
1864 "This driver shouldn't have an associated process id\n");
1869 switch (
status.dwCurrentState)
1873 trace(
"Got state %lx (pid=%04lx) for service %s\n",
1877 servicecountactive--;
1883 trace(
"Got state %lx (pid=%04lx) for service %s\n",
1890 ok(
status.dwProcessId > 0,
"Expected a process id for this running service (%s)\n",
1892 servicecountactive--;
1897 ok(
status.dwProcessId == 0,
"Service %s state %lu shouldn't have an associated process id\n",
1900 servicecountinactive--;
1904 ok(0,
"Got unknown state %lx (pid=%04lx) for service %s\n",
1913 if ((servicecountactive || servicecountinactive) && attempt)
1915 ok(servicecountactive == 0,
"Active services mismatch %lu\n", servicecountactive);
1916 ok(servicecountinactive == 0,
"Inactive services mismatch %lu\n", servicecountinactive);
1933 ok(!
ret,
"Expected failure\n");
1947 SC_HANDLE manager, service;
1953 skip(
"Not running under WoW64.\n");
1959 skip(
"Not enough permissions to create a service.\n");
1971 ok(!!service,
"Failed to create service, error %lu.\n",
GetLastError());
1973 ok(!
ret,
"Expected failure.\n");
1983 ok(!!service,
"Failed to create service, error %lu.\n",
GetLastError());
1985 ok(!
ret,
"Expected failure.\n");
2002 ok(!!service,
"Failed to create service, error %lu.\n",
GetLastError());
2004 ok(!
ret,
"Expected failure.\n");
2014 ok(!!service,
"Failed to create service, error %lu.\n",
GetLastError());
2016 ok(!
ret,
"Expected failure.\n");
2034 DWORD given, needed;
2035 static const CHAR servicename [] =
"winetest_sequence";
2036 static const CHAR displayname [] =
"Winetest dummy service";
2037 static const CHAR displayname2[] =
"Winetest dummy service (2)";
2039 static const CHAR dependencies[] =
"Master1\0Master2\0+MasterGroup1\0";
2042 static const CHAR localsystem [] =
"LocalSystem";
2049 skip(
"Not enough rights to get a handle to the manager\n");
2071 trace(
"Deletion probably didn't work last time\n");
2076 skip(
"Not enough rights to open the service\n");
2084 skip(
"Not enough rights to create the service\n");
2091 if (svc_handle !=
NULL)
2093 PSID sidOwner, sidGroup;
2102 &sidGroup, &
dacl, &sacl, &pSD);
2120 ok(
error == 0xdeadbeef,
"Unexpected last error %ld\n",
error);
2123 win_skip(
"A NULL security descriptor in GetSecurityInfo results in an exception on NT4.\n");
2129 ok(!bret,
"Expected QueryServiceObjectSecurity to fail: result %d\n", bret);
2132 "Expected ERROR_INSUFFICIENT_BUFFER, got %ld\n",
error);
2136 ok(bret,
"Expected QueryServiceObjectSecurity to succeed: result %d\n", bret);
2154 ok(!
ret,
"Expected failure\n");
2164 config->lpDisplayName,
"Expected all string struct members to be non-NULL\n");
2166 "Expected SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS, got %ld\n",
config->dwServiceType);
2171 ok(
config->dwTagId == 0,
"Expected 0, got %ld\n",
config->dwTagId);
2175 ok(!
memcmp(
config->lpDependencies, dependencies,
sizeof(dependencies)),
"Wrong string\n");
2177 ok(!
strcmp(
config->lpServiceStartName, localsystem),
"Expected 'LocalSystem', got '%s'\n",
config->lpServiceStartName);
2178 ok(!
strcmp(
config->lpDisplayName, displayname),
"Expected '%s', got '%s'\n", displayname,
config->lpDisplayName);
2188 config->lpDisplayName,
"Expected all string struct members to be non-NULL\n");
2190 "Expected SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS, got %ld\n",
config->dwServiceType);
2194 ok(!
strcmp(
config->lpLoadOrderGroup,
"TestGroup2"),
"Expected 'TestGroup2', got '%s'\n",
config->lpLoadOrderGroup);
2195 ok(
config->dwTagId == 0,
"Expected 0, got %ld\n",
config->dwTagId);
2196 ok(!
strcmp(
config->lpServiceStartName, localsystem),
"Expected 'LocalSystem', got '%s'\n",
config->lpServiceStartName);
2197 ok(!
strcmp(
config->lpDisplayName, displayname2),
"Expected '%s', got '%s'\n", displayname2,
config->lpDisplayName);
2217 static const CHAR servicename [] =
"winetest_query_config2";
2218 static const CHAR displayname [] =
"Winetest dummy service";
2220 static const CHAR dependencies[] =
"Master1\0Master2\0+MasterGroup1\0";
2223 static const CHAR description_empty[] =
"";
2224 static const WCHAR descriptionW [] = {
'D',
'e',
's',
'c',
'r',
'i',
'p',
't',
'i',
'o',
'n',
'W',0};
2225 static const WCHAR descriptionW_empty[] = {0};
2227 if(!pQueryServiceConfig2A)
2229 win_skip(
"function QueryServiceConfig2A not present\n");
2239 skip(
"Not enough rights to get a handle to the manager\n");
2258 trace(
"Deletion probably didn't work last time\n");
2264 skip(
"Not enough rights to open the service\n");
2273 skip(
"Not enough rights to create the service\n");
2286 ok(!
ret,
"expected QueryServiceConfig2A to fail\n");
2291 ok(!
ret,
"expected QueryServiceConfig2A to fail\n");
2296 ok(!
ret,
"expected QueryServiceConfig2A to fail\n");
2301 ok(!
ret,
"expected QueryServiceConfig2A to fail\n");
2303 "expected error ERROR_INVALID_ADDRESS or ERROR_INSUFFICIENT_BUFFER, got %ld\n",
GetLastError());
2307 ok(!
ret,
"expected QueryServiceConfig2A to fail\n");
2313 ok(!
ret,
"expected QueryServiceConfig2A to fail\n");
2320 ok(
ret,
"expected QueryServiceConfig2A to succeed\n");
2327 ok(!
ret,
"expected QueryServiceConfig2A to fail\n");
2331 if(!pChangeServiceConfig2A)
2333 win_skip(
"function ChangeServiceConfig2A not present\n");
2339 ok(
ret,
"ChangeServiceConfig2A failed\n");
2348 ok(!
ret,
"expected QueryServiceConfig2A to fail\n");
2354 ok(!
ret,
"expected QueryServiceConfig2A to fail\n");
2359 ok(
ret,
"expected QueryServiceConfig2A to succeed\n");
2365 ok(
ret,
"expected QueryServiceConfig2A to succeed\n");
2369 if(!pQueryServiceConfig2W)
2371 win_skip(
"function QueryServiceConfig2W not present\n");
2378 ok(!
ret,
"expected QueryServiceConfig2W to fail\n");
2384 ok(
ret,
"expected QueryServiceConfig2W to succeed\n");
2388 ok(
ret,
"expected ChangeServiceConfig2A to succeed\n");
2392 ok(
ret,
"expected QueryServiceConfig2A to succeed\n");
2398 ok(
ret,
"expected ChangeServiceConfig2A to succeed\n");
2402 ok(
ret,
"expected QueryServiceConfig2A to succeed\n");
2408 ok(
ret,
"expected ChangeServiceConfig2A to succeed\n");
2412 ok(
ret,
"expected QueryServiceConfig2A to succeed\n");
2414 "expected lpDescription to be null, got %s\n", pConfig->
lpDescription);
2418 ok(
ret,
"expected ChangeServiceConfig2W to succeed\n");
2422 ok(
ret,
"expected QueryServiceConfig2A to succeed\n");
2428 ok(
ret,
"expected ChangeServiceConfig2W to succeed\n");
2432 ok(
ret,
"expected QueryServiceConfig2A to succeed\n");
2438 ok(
ret,
"expected ChangeServiceConfig2W to succeed\n");
2442 ok(
ret,
"expected QueryServiceConfig2A to succeed\n");
2449 (
LPBYTE)&preshutdown_info,
sizeof(preshutdown_info), &needed);
2453 win_skip(
"SERVICE_CONFIG_PRESHUTDOWN_INFO not supported\n");
2457 ok(needed ==
sizeof(preshutdown_info),
"needed = %ld\n", needed);
2465 (
LPVOID)&preshutdown_info);
2469 (
LPBYTE)&preshutdown_info,
sizeof(preshutdown_info), &needed);
2471 ok(needed ==
sizeof(preshutdown_info),
"needed = %ld\n", needed);
2479 (
LPBYTE)&auto_start_info,
sizeof(auto_start_info), &needed);
2481 ok(needed ==
sizeof(auto_start_info),
"needed = %ld\n", needed);
2487 (
LPBYTE)&auto_start_info);
2488 ok(!
ret,
"expected ChangeServiceConfig2A to fail\n");
2494 (
LPBYTE)&auto_start_info);
2501 (
LPBYTE)&auto_start_info,
sizeof(auto_start_info), &needed);
2503 ok(needed ==
sizeof(auto_start_info),
"needed = %ld\n", needed);
2520 ok(!
ret,
"%s: StartServiceA() should have failed\n",
name);
2522 if (pQueryServiceStatusEx)
2535 ok(!
ret,
"%s: StartServiceA() should have failed\n",
name);
2536 ok(le2 == le1,
"%s: the second try should yield the same error: %lu != %lu\n",
name, le1, le2);
2538 status.dwCurrentState = 0xdeadbeef;
2541 ok(!
ret,
"%s: ControlService() should have failed\n",
name);
2545 "%s: should be stopped state=%lx\n",
name,
status.dwCurrentState);
2550#define PHASE_STOPPED 1
2551#define PHASE_RUNNING 2
2563 switch (
data->phase)
2567 "Got wrong notification status: %lu\n",
data->notify.dwNotificationStatus);
2569 "Got wrong service state: 0x%lx\n",
data->notify.ServiceStatus.dwCurrentState);
2571 "Got wrong notification triggered: 0x%lx\n",
data->notify.dwNotificationTriggered);
2576 "Got wrong notification status: %lu\n",
data->notify.dwNotificationStatus);
2578 "Got wrong service state: 0x%lx\n",
data->notify.ServiceStatus.dwCurrentState);
2580 "Got wrong notification triggered: 0x%lx\n",
data->notify.dwNotificationTriggered);
2596 if(!pNotifyServiceStatusChangeW){
2597 win_skip(
"No NotifyServiceStatusChangeW\n");
2603 ok(
svc !=
NULL && svc2 !=
NULL,
"Failed to open service\n");
2617 ok(dr ==
ERROR_SUCCESS,
"NotifyServiceStatusChangeW failed: %lu\n", dr);
2621 ok(
data.was_called ==
TRUE,
"APC wasn't called\n");
2631 ok(dr ==
ERROR_SUCCESS,
"NotifyServiceStatusChangeW failed: %lu\n", dr);
2635 ok(
data.was_called ==
TRUE,
"APC wasn't called\n");
2642 ok(dr ==
ERROR_SUCCESS,
"NotifyServiceStatusChangeW failed: %lu\n", dr);
2657 ok(
data2.was_called,
"APC was not called\n");
2662 ok(!dr,
"got %lu\n", dr);
2663 ok(!
data2.was_called,
"APC should not have been called\n");
2665 ok(
data.was_called ==
FALSE,
"APC should not have been called\n");
2677 ok(dr ==
ERROR_SUCCESS,
"NotifyServiceStatusChangeW gave wrong result: %lu\n", dr);
2686 ok(
data.was_called ==
TRUE,
"APC wasn't called\n");
2687 ok(
data2.was_called ==
TRUE,
"APC wasn't called\n");
2696 ok(dr ==
ERROR_SUCCESS,
"NotifyServiceStatusChangeW failed: %lu\n", dr);
2704 ok(dr == 0,
"Got wrong SleepEx result: %lu\n", dr);
2705 ok(
data.was_called ==
FALSE,
"APC should not have been called\n");
2718 static const char servicename[] =
"winetest_start_stop";
2720 const char* displayname;
2727 skip(
"Not enough rights to get a handle to the manager\n");
2747 displayname =
"Winetest Disabled Service";
2755 skip(
"Not enough rights to create the service\n");
2764 displayname =
"Winetest Bad Path";
2765 ret =
ChangeServiceConfigA(svc_handle,
SERVICE_NO_CHANGE,
SERVICE_DEMAND_START,
SERVICE_NO_CHANGE,
"c:\\no_such_file.exe",
NULL,
NULL,
NULL,
NULL,
NULL, displayname);
2774 win_skip(
"Skip some service start/stop tests on NT4\n");
2779 displayname =
"Winetest Exit Service";
2780 ret =
ChangeServiceConfigA(svc_handle,
SERVICE_NO_CHANGE,
SERVICE_NO_CHANGE,
SERVICE_NO_CHANGE,
cmd,
NULL,
NULL,
NULL,
NULL,
NULL, displayname);
2787 displayname =
"Winetest Service";
2788 ret =
ChangeServiceConfigA(svc_handle,
SERVICE_NO_CHANGE,
SERVICE_NO_CHANGE,
SERVICE_NO_CHANGE,
cmd,
NULL,
NULL,
NULL,
NULL,
NULL, displayname);
2803 SC_HANDLE
scm_handle, svc_handle1, svc_handle2, svc_handle3, svc_handle4, svc_handle5;
2804 static const CHAR servicename [] =
"winetest_refcount";
2813 skip(
"Not enough rights to get a handle to the manager\n");
2855 ok(!svc_handle5,
"Expected failure\n");
2857 "Expected ERROR_SERVICE_MARKED_FOR_DELETE, got %ld\n",
GetLastError());
2899 if (pGetThreadUILanguage)
2901 if (pGetUserDefaultUILanguage)
2923 ok(!
ret,
"QueryServiceConfig should fail\n");
2933 ok(!
strcmpi(
config->lpBinaryPathName,
"C:\\windows\\system32\\services.exe") ||
2934 !
strcmpi(
config->lpBinaryPathName,
"C:\\windows\\system32\\svchost.exe -k LocalServiceNetworkRestricted") ||
2935 !
strcmpi(
config->lpBinaryPathName,
"C:\\windows\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p") ,
2936 "got %s\n",
config->lpBinaryPathName);
2939 ok(
config->dwTagId == 0,
"Expected 0, got %ld\n",
config->dwTagId);
2940 ok(!
config->lpDependencies[0],
"lpDependencies is not empty\n");
2942 !
strcmp(
config->lpServiceStartName,
"NT AUTHORITY\\LocalService"),
2943 "got %s\n",
config->lpServiceStartName);
2946 !
strcmp(
config->lpDisplayName,
"Windows Event Log") ,
"got %s\n",
config->lpDisplayName);
2956 "got %#lx\n",
status.dwServiceType);
2957 ok(
status.dwServiceSpecificExitCode == 0,
"got %#lx\n",
status.dwServiceSpecificExitCode);
2961 "got %#lx\n",
status.dwServiceFlags);
2971 "got %#lx\n",
status.dwControlsAccepted);
2972 ok(
status.dwWin32ExitCode == 0,
"got %#lx\n",
status.dwWin32ExitCode);
3053 win_skip(
"OpenSCManagerA is not implemented, we are most likely on win9x\n");
3071 for (attempt = 2; attempt >= 0; attempt--)
3073 for (attempt = 2; attempt >= 0; attempt--)
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
static SC_HANDLE scm_handle
void account(int argc, const char *argv[])
void user(int argc, const char *argv[])
VOID WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv)
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
DWORD WINAPI GetSecurityInfo(HANDLE handle, SE_OBJECT_TYPE ObjectType, SECURITY_INFORMATION SecurityInfo, PSID *ppsidOwner, PSID *ppsidGroup, PACL *ppDacl, PACL *ppSacl, PSECURITY_DESCRIPTOR *ppSecurityDescriptor)
BOOL WINAPI GetUserNameA(LPSTR lpszName, LPDWORD lpSize)
static const WCHAR empty[1]
#define ERROR_INVALID_ADDRESS
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define GetProcAddress(x, y)
#define CreateFileA(a, b, c, d, e, f, g)
#define GetCurrentProcess()
#define ERROR_INVALID_HANDLE
#define GetEnvironmentVariableA(x, y, z)
#define MultiByteToWideChar
#define ERROR_ACCESS_DENIED
#define ERROR_INVALID_NAME
static void cleanup(void)
static const WCHAR descriptionW[]
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
DWORD WINAPI GetFullPathNameA(IN LPCSTR lpFileName, IN DWORD nBufferLength, OUT LPSTR lpBuffer, OUT LPSTR *lpFilePart)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
LANGID WINAPI GetUserDefaultLangID(void)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
static int strcmpi(const char *s1, const char *s2)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
static const WCHAR displaynameW[]
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLsizei bufsize
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
const char * winetest_platform
#define ERROR_FILE_NOT_FOUND
static void test_get_servicekeyname(void)
static const CHAR spooler[]
static BOOL test_enum_svc(int attempt)
static void test_open_scm(void)
static void test_get_displayname(void)
static PSECURITY_DESCRIPTOR
static SECURITY_INFORMATION
static void test_EventLog(void)
static BOOL is_lang_english(void)
static void test_wow64(void)
static void test_servicenotify(SC_HANDLE scm_handle, const char *servicename)
static BOOL test_enum_svc_ex(int attempt)
static CHAR selfname[MAX_PATH]
static void test_open_svc(void)
static void test_close(void)
static void CALLBACK notify_cb(void *user)
static void test_query_svc(void)
static void test_refcount(void)
static void test_sequence(void)
static DWORD try_start_stop(SC_HANDLE svc_handle, const char *name, DWORD is_nt4)
static void run_service(void)
static void test_create_delete_svc(void)
static void test_start_stop(void)
static void test_queryconfig2(void)
static SERVICE_NOTIFYW *static void init_function_pointers(void)
static HINSTANCE hkernel32
#define STANDARD_RIGHTS_READ
#define SERVICE_STATE_ALL
struct _SERVICE_DESCRIPTIONA SERVICE_DESCRIPTIONA
#define SERVICE_ACCEPT_STOP
#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO
#define SERVICE_QUERY_STATUS
#define SERVICE_CONFIG_DESCRIPTION
struct _SERVICE_DESCRIPTIONW SERVICE_DESCRIPTIONW
#define SC_MANAGER_ENUMERATE_SERVICE
#define SC_MANAGER_CREATE_SERVICE
#define SERVICES_ACTIVE_DATABASEA
#define SC_MANAGER_CONNECT
#define SERVICE_NOTIFY_STOPPED
#define SERVICE_NO_CHANGE
#define SERVICE_STOP_PENDING
#define SERVICE_RUNS_IN_SYSTEM_PROCESS
#define SERVICES_FAILED_DATABASEA
struct _SERVICE_DESCRIPTIONW * LPSERVICE_DESCRIPTIONW
#define SERVICE_NOTIFY_STATUS_CHANGE
struct _SERVICE_DESCRIPTIONA * LPSERVICE_DESCRIPTIONA
#define SERVICE_START_PENDING
#define SERVICE_CONTROL_STOP
#define SERVICE_CONFIG_PRESHUTDOWN_INFO
#define SERVICE_ACCEPT_SHUTDOWN
#define SERVICE_PAUSE_PENDING
#define SERVICE_NOTIFY_RUNNING
struct _SERVICE_STATUS_PROCESS SERVICE_STATUS_PROCESS
#define SERVICE_CONTROL_INTERROGATE
#define SERVICE_CONTINUE_PENDING
#define SERVICE_ACCEPT_TIMECHANGE
BOOL WINAPI QueryServiceStatus(SC_HANDLE hService, LPSERVICE_STATUS lpServiceStatus)
BOOL WINAPI DeleteService(SC_HANDLE hService)
BOOL WINAPI StartServiceA(SC_HANDLE hService, DWORD dwNumServiceArgs, LPCSTR *lpServiceArgVectors)
BOOL WINAPI ControlService(SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
SC_HANDLE WINAPI OpenServiceA(SC_HANDLE hSCManager, LPCSTR lpServiceName, DWORD dwDesiredAccess)
BOOL WINAPI GetServiceDisplayNameW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, LPWSTR lpDisplayName, LPDWORD lpcchBuffer)
BOOL WINAPI GetServiceKeyNameA(SC_HANDLE hSCManager, LPCSTR lpDisplayName, LPSTR lpServiceName, LPDWORD lpcchBuffer)
BOOL WINAPI GetServiceDisplayNameA(SC_HANDLE hSCManager, LPCSTR lpServiceName, LPSTR lpDisplayName, LPDWORD lpcchBuffer)
BOOL WINAPI QueryServiceConfigA(SC_HANDLE hService, LPQUERY_SERVICE_CONFIGA lpServiceConfig, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
BOOL WINAPI ChangeServiceConfigA(SC_HANDLE hService, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCSTR lpBinaryPathName, LPCSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCSTR lpDependencies, LPCSTR lpServiceStartName, LPCSTR lpPassword, LPCSTR lpDisplayName)
BOOL WINAPI EnumServicesStatusA(SC_HANDLE hSCManager, DWORD dwServiceType, DWORD dwServiceState, LPENUM_SERVICE_STATUSA lpServices, DWORD cbBufSize, LPDWORD pcbBytesNeeded, LPDWORD lpServicesReturned, LPDWORD lpResumeHandle)
SC_HANDLE WINAPI CreateServiceA(SC_HANDLE hSCManager, LPCSTR lpServiceName, LPCSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCSTR lpBinaryPathName, LPCSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCSTR lpDependencies, LPCSTR lpServiceStartName, LPCSTR lpPassword)
SC_HANDLE WINAPI OpenSCManagerA(LPCSTR lpMachineName, LPCSTR lpDatabaseName, DWORD dwDesiredAccess)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
BOOL WINAPI GetServiceKeyNameW(SC_HANDLE hSCManager, LPCWSTR lpDisplayName, LPWSTR lpServiceName, LPDWORD lpcchBuffer)
BOOL WINAPI EnumServicesStatusW(SC_HANDLE hSCManager, DWORD dwServiceType, DWORD dwServiceState, LPENUM_SERVICE_STATUSW lpServices, DWORD cbBufSize, LPDWORD pcbBytesNeeded, LPDWORD lpServicesReturned, LPDWORD lpResumeHandle)
BOOL WINAPI StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA *lpServiceStartTable)
SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR lpServiceName, LPHANDLER_FUNCTION_EX lpHandlerProc, LPVOID lpContext)
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
int winetest_get_mainargs(char ***pargv)
SERVICE_STATUS_PROCESS ServiceStatusProcess
DWORD dwPreshutdownTimeout
DWORD dwServiceSpecificExitCode
DWORD WINAPI SleepEx(IN DWORD dwMilliseconds, IN BOOL bAlertable)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
_In_ LPCSTR _Out_writes_to_opt_ cchDisplayName LPSTR lpDisplayName
DWORD WINAPI GetLastError(void)
#define WAIT_IO_COMPLETION
#define ERROR_INVALID_LEVEL
#define ERROR_SERVICE_MARKED_FOR_DELETE
#define ERROR_INVALID_SERVICE_ACCOUNT
#define ERROR_SERVICE_NOT_ACTIVE
#define ERROR_BAD_EXE_FORMAT
#define ERROR_SERVICE_DOES_NOT_EXIST
#define ERROR_DUPLICATE_SERVICE_NAME
#define ERROR_ALREADY_REGISTERED
#define ERROR_SERVICE_EXISTS
#define ERROR_SERVICE_DISABLED
#define RPC_S_SERVER_UNAVAILABLE
#define ERROR_SERVICE_REQUEST_TIMEOUT
#define RPC_S_INVALID_NET_ADDR
#define ERROR_PROCESS_ABORTED
#define ERROR_DATABASE_DOES_NOT_EXIST
#define SERVICE_DEMAND_START
#define SERVICE_KERNEL_DRIVER
#define SERVICE_WIN32_SHARE_PROCESS
#define SERVICE_INTERACTIVE_PROCESS
#define SERVICE_AUTO_START
#define SERVICE_BOOT_START
#define SERVICE_WIN32_OWN_PROCESS
#define SERVICE_FILE_SYSTEM_DRIVER
#define SERVICE_ERROR_IGNORE
#define SERVICE_ERROR_NORMAL
#define DACL_SECURITY_INFORMATION