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.exeMit 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