コード例 #1
0
ファイル: sexpots.c プロジェクト: K6BSD/SBBSUnstable
static int enable(BOOL enabled)
{
    SC_HANDLE   hSCManager;

    hSCManager = OpenSCManager(
                        NULL,                   // machine (NULL == local)
                        NULL,                   // database (NULL == default)
                        SC_MANAGER_ALL_ACCESS   // access required
                        );
    if(hSCManager==NULL) {
		fprintf(stderr,"!ERROR %d opening SC manager\n",GetLastError());
		return(-1);
	}

	set_service_start_type(hSCManager
		,enabled ? SERVICE_AUTO_START : SERVICE_DISABLED);

	CloseServiceHandle(hSCManager);

	return(0);
}
コード例 #2
0
ファイル: svccntrl.c プロジェクト: AVGirl/dynamorio
int
main(int argc, char **argv)
{
    int res=0,
        sauto=0,
        sman=0,
        sdis=0,
        show=0,
        depreset=0,
        srestart=0;
    char *dep = NULL;

    char *svcname=NULL;
    int argidx=1;
    ServiceHandle svc;
    WCHAR w_buf[MAX_PATH];

    svcname = argv[argidx++];

    while (argidx < argc) {

        if (!strcmp(argv[argidx], "-help")) {
              help();
        }
        else if (!strcmp(argv[argidx], "-auto")) {
            sauto=1;
        }
        else if (!strcmp(argv[argidx], "-manual")) {
            sman=1;
        }
        else if (!strcmp(argv[argidx], "-restart")) {
            srestart=1;
        }
        else if (!strcmp(argv[argidx], "-show")) {
            show=1;
        }
        else if (!strcmp(argv[argidx], "-depreset")) {
            depreset=1;
        }
        else if (!strcmp(argv[argidx], "-dep")) {
            if (argidx + 1 >= argc)
                usage();
            dep = argv[++argidx];
        }
        else if (!strcmp(argv[argidx], "-disabled")) {
            sdis=1;
        }
        else if (!strcmp(argv[argidx], "-v")) {
#ifdef BUILD_NUMBER
          printf("svccntrl.exe build %d -- %s\n", BUILD_NUMBER, __DATE__);
#else
          printf("svccntrl.exe custom build -- %s, %s\n", __DATE__, __TIME__);
#endif
        }
        else {
            fprintf(stderr, "Unknown option: %s\n", argv[argidx]);
            usage();
        }
        argidx++;
    }

    if (argc < 3)
        usage();

    if ( sauto + sman + sdis + show + srestart != 1 &&
         dep == NULL && !depreset) {
        fprintf(stderr, "Bad combination of options.\n");
        usage();
    }

    services_init();

    if (show) {
        enumerate_services(&show_svcs_cb, NULL);
    }
    else {

        _snwprintf(w_buf, MAX_PATH, L"%S", svcname);

        if (srestart) {
            res = set_service_restart_type(w_buf, FALSE);
            if (res != ERROR_SUCCESS) {
                fprintf(stderr, "Error %d updating the configuration\n", res);
            }
        }
        else if (dep) {
            ServiceHandle svc2;
            svc = get_svc(svcname);
            svc2 = get_svc(dep);
            if (svc == INVALID_SERVICE_HANDLE ||
                svc2 == INVALID_SERVICE_HANDLE) {
                fprintf(stderr, "Invalid services: %s, %s\n", svcname, dep);
            }
            else {
                res = add_dependent_service(svc, svc2);
                if (res != ERROR_SUCCESS)
                    fprintf(stderr, "Error %d setting dependencies\n", res);
            }
        }
        else if (depreset) {
            svc = get_svc(svcname);
            if (svc == INVALID_SERVICE_HANDLE) {
                fprintf(stderr, "Invalid service: %s\n", svcname);
            }
            else {
                res = reset_dependent_services(svc);
                if (res != ERROR_SUCCESS)
                    fprintf(stderr, "Error %d resetting dependencies\n", res);
            }
        }
        else {
            svc = get_svc(svcname);

            if (svc == INVALID_SERVICE_HANDLE) {
                fprintf(stderr, "Invalid service: %s\n", svcname);
            } else {
                res = set_service_start_type(svc, sauto ? SERVICE_AUTO_START :
                                             sman ? SERVICE_DEMAND_START :
                                             sdis ? SERVICE_DISABLED :
                                             SERVICE_NO_CHANGE);
                if (res != ERROR_SUCCESS)
                    fprintf(stderr, "There was an error setting the configuration\n");
            }
        }

    }

    services_cleanup();

    return 0;

}