EnumServicesStatusEx() beendet Programm ohne Fehler



  • Hi,

    ich hab ein Servicelist Programm geschrieben das falls ein Dienst läuft den zugehörigen Prozess mitanzeigt.

    Leider macht es auf WINXP SP2 Probleme da das Programm keine Fehler auswirft hab ich per printf() Checkausgaben eingebaut. So konnte ich die genaue Codezeile ausmachen bei der das Programm einfach stopt.

    void grabservices(BOOL run){
    
    	printf("1");
        SC_HANDLE sc = OpenSCManager (NULL,NULL,SC_MANAGER_ENUMERATE_SERVICE);
        if (sc != NULL){
    		printf("2");
    
    		short getprocinfo = 1;
    		int running = 0;
    		int retVal;
            ENUM_SERVICE_STATUS_PROCESS *lpservice;
            DWORD bytesNeeded,srvCount,resumeHandle = 0;
    		SERVICE_STATUS_PROCESS ssStatus;
    		SC_HANDLE schService;
    
    	    HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    		if (hSnapshot == NULL){	//Der vom jeweiligen Dienst gestartete´Prozess kann nicht angezeigt werden
    		  getprocinfo  = 0;
    	    }
    
    		PROCESSENTRY32 pe;
    	    pe.dwSize=sizeof(PROCESSENTRY32);
    
    		printf("3");
            retVal = EnumServicesStatusEx (sc,SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL,0,0,&bytesNeeded,&srvCount,&resumeHandle, NULL);
    
    		DWORD err = GetLastError();
            if (retVal != 0 || err == ERROR_MORE_DATA){
    			printf("4\n");
                DWORD dwBytes = bytesNeeded;// + sizeof(ENUM_SERVICE_STATUS_PROCESS);
    			printf("4.01\n");
                lpservice = new (ENUM_SERVICE_STATUS_PROCESS);
    			printf("4.02\n");
    
    //------------------------ der nächste Befehl führt zum Programmabbruch -----
    
                retVal = EnumServicesStatusEx (sc,SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL,(LPBYTE)lpservice,dwBytes,&bytesNeeded,&srvCount,&resumeHandle, NULL);
    			err = GetLastError();
    			printf(" EnumServicesStatusEx - FehlerCode: %d");
    			printf("4.1\n");
    

    die Ausgabe von SP1 sieht so aus

    C:\>catz +listx
    82 Dienste gefunden
    01. <Alerter> Warndienst
    02. <ALG> Gatewaydienst auf Anwendungsebene
    03. <AntiVirService> AntiVir Service | 1712 AVGUARD.EXE
    04. <AppMgmt> Anwendungsverwaltung
    05. <aspnet_state> ASP.NET State Service
    06. <AudioSrv> Windows Audio | 1036 svchost.exe
    07. <AVWUpSrv> AntiVir Update | 1724 AVWUPSRV.EXE
    08. <BITS> Intelligenter Hintergrund³bertragungsdienst
    09. <Browser> Computerbrowser | 1036 svchost.exe

    Mit installiertem SP2 stopt es direkt nach der Ausgabe von "4.02" also weder der Fehler noch die "4.1" werden ausgegeben.

    Woran kann das liegen ?

    tia mfg ch



  • das ,err steht da auch also:

    printf(" EnumServicesStatusEx - FehlerCode: %d",err);
    statt
    printf(" EnumServicesStatusEx - FehlerCode: %d");

    sry


Anmelden zum Antworten