Dienste auflisten
-
k, sry habs gesehen, ich selbst soll einen Buffer zur Verfügung stellen.
danke,mfg
-
Kannst du mir trotzdem ob dieser buffer irgendwie speziell beschaffen sein muss bzw wie ich später die dienste auslesen kann (aus dem buffer mein ich)?
MFG
-
So wie ich das lese erwartet er als 5. Parameter einen Pointer zu einen Puffer. Guck mal was du übergibst? Das ist doch nen define oder sowas aus ner Header Datei

Du musst Speicher für einen Puffer anlegen und diesen übergeben und als 6. Parameter die größe des Puffers.
MfG schirrmie
-
achso,ja genau,pointer hab ich gemeint :),
dh einfach lpword/char[100000] reicht das?
mfg
-
Ich weiss leider sogar nicht wie ich das mit dem puffer handlen soll.
vor allem wieso legt man hier nicht strct arrays an sondern einen buffer??
und wie soll ich dann aus dem auslesen?
-
lesen
msdn schrieb:
lpServices
[out] Pointer to the buffer that receives the status information. The format of this data depends on the value of the InfoLevel parameter.The maximum size of this array is 256K bytes. To determine the required size, specify NULL for this parameter and 0 for the cbBufSize parameter. The function will fail and GetLastError will return ERROR_MORE_DATA. The pcbBytesNeeded parameter will receive the required size.
Windows Server 2003 and Windows XP: The maximum size of this array is 64K bytes. This limit was increased as of Windows Server 2003 SP1 and Windows XP SP2.
als parameter erwartet er einen zeiger auf ein char array. bsp: char buffer[256];
Kazuum schrieb:
und wie soll ich dann aus dem auslesen?
zb: printf("bufferinhalt %s \n", buffer);
-
Hi,
hab jetzt mal bei google/codesearch gsucht und is doch n struct array. char wär irgendwie auch zu umständlich gewesen.
aufjedenfall hab ich das mal erarbeitet und das Programm findet auch etwas nur leider wurde nur ein String richtig ausgegeben alle anderen haben kryptische Ausgaben.
#include <stdio.h> #include <time.h> #include <windows.h> #include <string.h> int listenupservices(void) { unsigned long int *i=0; ENUM_SERVICE_STATUS buffer[100]; LPDWORD pcbBytesNeeded=0; LPDWORD lpServicesReturned; LPDWORD lpResumeHandle=0; SC_HANDLE schSCManager; schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS); if (NULL == schSCManager) {return 1;} EnumServicesStatusEx(schSCManager,SC_ENUM_PROCESS_INFO, SERVICE_WIN32,SERVICE_STATE_ALL, (LPBYTE)buffer,sizeof(ENUM_SERVICE_STATUS), pcbBytesNeeded,lpServicesReturned,lpResumeHandle,0); printf("%s",buffer[0].lpServiceName); return 0; } int main() { listenupservices(); return 0; }
-
Kazuum schrieb:
hab jetzt mal bei google/codesearch gsucht und is doch n struct array. char wär irgendwie auch zu umständlich gewesen.
dann schau dir doch mal die struktur an und verrate mir was als erste im speicher steht

http://msdn2.microsoft.com/en-us/library/ms682651.aspxdein buffer ist grösser, sprich
sizeof(ENUM_SERVICE_STATUS) * 100
-
k
dann haben wir eh das selbe gemeint, ich dachte es wäre gemeint NUR ein char buffer in den dann alles wie service status etc reingeschrieben werden.Hmm hab das mal gemacht thx, aber wie vorhin gibt es noch immer so kryptische Strings.
Hab da echt keinen Plan
-
so habs mal verändert und durch den debugger geschickt.
Das interessante:
in den variablen werden tatsächlich viele dienste gespeichert jedoch oft nur einer der beiden Namen und oft auch unregelmäßig also manche dazwischenliegenden arrayelemente sind einfach leer.
Hier mal der Code:
#include <stdio.h> #include <time.h> #include <windows.h> #include <string.h> int listenupservices(void) { int i=0; int k=0; ENUM_SERVICE_STATUS buffer[100]; unsigned long int pcbBytesNeeded=0; unsigned long int lpServicesReturned; unsigned long int lpResumeHandle; SC_HANDLE schSCManager; schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS); if (NULL == schSCManager) {return 1;} EnumServicesStatusEx(schSCManager,SC_ENUM_PROCESS_INFO, SERVICE_WIN32,SERVICE_STATE_ALL, (char *)buffer,sizeof(buffer), &pcbBytesNeeded,&lpServicesReturned,&lpResumeHandle,NULL); EnumServicesStatusEx(schSCManager,SC_ENUM_PROCESS_INFO, SERVICE_WIN32,SERVICE_STATE_ALL, (char *)buffer,sizeof(buffer), &pcbBytesNeeded,&lpServicesReturned,&lpResumeHandle,NULL); printf("%s",buffer[3].lpServiceName); return 0; } int main () { listenupservices(); return 0; }
-
*push*

-
Echt keiner ne Idee wie man das richtig macht?
mfg
-
Naja ich weiss pushen nervt aber ich steck da echt in einer Sackgasse, natürlich spiel ich mich selbst auch damit aber bisjetzt bin ich noch nicht wirklich weitergekommen, daher bitte ich euch nochmal um Hilfe.
mfg
-
hat sich erledigt- hab einfach enumservicestatus genommen.
mfg